别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

PythonOpenCV-图像变换-图像模糊

0. 简介

  图像模糊又称图像平滑处理。其主要处理图像中与周围差异较大的点,将其像素值调整为与周围相似的值,其主要目的是消除图像噪声和边缘

 

1. 均值滤波

  均值滤波是指以当前点为中心,用其周围N*N个点像素值的平均值来代替当前点的像素值。

  用来计算平均值的N*N的点成为邻域,用于滤波计算的卷积核大小与邻域相同。

  OpenCv中用cv2.blur()函数实现,其基本格式如下:

dst = cv2.blur(src, ksize [, anchor [, borderType]])

  参数说明:

dst:滤波结果图像

src:原图像

ksize:卷积核大小,表示为(width, height), width和height通常设置为相同值,且为正数和奇数

anchor:锚点,默认值为(-1, -1),表示锚点位于卷积核中心

borderType:边界值处理方式

  代码示例:

import cv2 as cv

img_src = cv.imread('Pictures/lena.jpg')
cv.imshow('src', img_src)
img_blur = cv.blur(img_src, (5, 5))
cv.imshow('blur', img_blur)
cv.waitKey(0)

  运行结果:

 

2. 高斯滤波

   高斯滤波与均值滤波略有不同,它按像素点与中心点的不同距离,赋予像素点不同的权重值,越靠近中心点权重值越大,越远离中心点权重值越小,然后根据权重值计算邻域内所有像素点的和,将和作为中心点的像素值。

  OpenCV的 cv2.GaussianBlur()函数用于实现高斯滤波,其基本格式如下:

dst = cv2.GaussianBlur(src, ksize, sigmaX [, sigmaY [, borderType]])

  参数说明:

dst:滤波结果图像

src:原图像

ksize:卷积核大小

sigmaX:水平方向的权重值

sigmaY:垂直方向的权重值

borderType:边界值处理方式

   代码示例:

import cv2 as cv

img_src = cv.imread('Pictures/lena.jpg')
cv.imshow('src', img_src)
img_GaussianBlur = cv.GaussianBlur(img_src, (5, 5), 0.9)
cv.imshow('GaussianBlur', img_GaussianBlur)
cv.waitKey(0)

 

  运行结果:

 

3. 方框滤波

  方框滤波以均值滤波为基础,可选择是否对滤波结果进行归一化,如果选择进行归一化,则滤波结果为邻域内点的像素值之和的平均值,否则滤波结果为像素值之和。

  OpenCV的 cv2.boxFilter()函数用于实现方框滤波,其基本格式如下:

dst = cv2.boxFilter(src, ddepth, ksize[, anchor[, normalize[, borderType]]])

  参数说明:

dst:滤波结果图像

src:原图像

ddepth:目标图像的深度,一般使用-1表示与原图深度一样

ksize:卷积核大小,表示为(width, height), width和height通常设置为相同值,且为正数和奇数

anchor:锚点,默认值为(-1, -1),表示锚点位于卷积核中心

normalize:可设置为True或False,表示是否归一化

borderType:边界值处理方式

  代码示例:

import cv2 as cv

img_src = cv.imread('Pictures/lena.jpg')
cv.imshow('src', img_src)
img_boxFilter = cv.boxFilter(img_src, -1, (3, 3), normalize=True)
cv.imshow('boxFilter', img_boxFilter)
cv.waitKey(0)

  运行结果:

 

4. 中值滤波

  中值滤波将邻域内的所有像素值排序,取中间值作为邻域中心点的像素值

  OpenCV的cv2.medianBlur()函数用于实现中值滤波,其基本格式如下:

dst = cv2.medianBlur(src, ksize)

  参数说明:

dst:滤波结果图像

src:原图像

ksize:卷积核大小,必须是大于1的奇数

  代码示例:

import cv2 as cv

img_src = cv.imread('Pictures/lena.jpg')
cv.imshow('src', img_src)
img_medianBlur = cv.medianBlur(img_src, 21)
cv.imshow('medianBlur', img_medianBlur)
cv.waitKey(0)

  运行结果:

 

5. 双边滤波

  双边滤波在计算像素值的同时会考虑距离和色差信息,从而可在消除噪声的同时保护边缘信息。

  在执行双边滤波操作时,如果像素点与当前点色差较小,则赋予其较大的权重值,否则赋予其较小的权重值。

  OpenCV的cv2.bilateralFilter()函数用于实现双边滤波,其基本格式如下:

dst =cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, borderType])

  参数说明:

dst:滤波结果图像

src:原图像

d:以当前点为中心的邻域的直径,一般为5

sigmaColor:双边滤波选择的色差范围

sigmaSpace:空间坐标中的sigma值,值越大表示越多的像素点参与滤波计算。当d>0时,忽略sigmaSpace,由d决定邻域大小;否则d由sigmaSpace计算得出,与sigmaSpace成比例。

borderType:边界值处理方式

  代码示例:

import cv2 as cv

img_src = cv.imread('Pictures/pepper_dog.png')
cv.imshow('src', img_src)
img_dst1 = cv.bilateralFilter(img_src, 20, 100, 100)
cv.imshow('bilateralFilter', img_dst1)
cv.waitKey(0)

  运行结果:

 

 

6. 2D卷积

  均值滤波、高斯滤波、方框滤波、中值滤波和双边滤波等可以通过参数来确定卷积核,2D 卷积可使用自定义的卷积核来执行滤波操作。
  OpenCV的 cv2.filter2D()函数用于实现 2D 卷积,其基本格式如下:

dst = cv2.filter2D(src, ddepth, kernel[, anchor[, delta[, borderType]]])

  参数说明:

dst:滤波结果图像

src:原图像

ddepth:目标图像的深度,一般使用-1表示与原图深度一样

kernel:单通道卷积核(一维数组 )

anchor:锚点,默认值为(-1, -1),表示锚点位于卷积核中心

delta:修正值,未省略时,将加上该值作为最终的滤波结果

borderType:边界值处理方式

  代码示例:

import cv2 as cv
import numpy as np

img_src = cv.imread('Pictures/pepper_dog.png')
cv.imshow('src', img_src)
k1 = np.array([[3, 3, 3, 3, 3], [3, 9, 9, 9, 3], [3, 11, 11, 11, 3], [3, 8, 8, 8, 3],
               [3, 3, 3, 3, 3]]) / 25   # 自定义卷积核1
k2 = np.ones((5, 5), np.float32) / 25   # 自定义卷积核2
img_dst1 = cv.filter2D(img_src, -1, k1)
cv.imshow('dst1', img_dst1)
img_dst2 = cv.filter2D(img_src, -1, k2)
cv.imshow('dst2', img_dst2)
cv.waitKey(0)

  运行结果:

 

/*-------------------------------------------------------------------------------------------------------

笔者说明:

  该笔记来源于本人学习Python + OpenCv时的资料,

  分享出来只是为了供大家学习,并且为了自己以后想要用的时候方便寻找。

时间:2023年8月22日

------------------------------------------------------------------------------------------------------------*/

 

posted @ 2023-08-22 12:48  一路狂奔的乌龟  阅读(162)  评论(0)    收藏  举报
返回顶部