【Opencv3+Python3入门(9)模糊操作与基本滤波操作】

图像的模糊处理,滤波,卷积等操作等是图像处理与计算机视觉中的一个重要内容。

图像均值滤波:

函数:

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

#9,图像滤波操作
import cv2 as cv
import numpy as np

def mean_Filter(image):
    #均值滤波
    #第一个参数:输入图像,第二个参数位卷积核形状
    meanImage=cv.blur(image,(5,5))
    cv.imshow("meanfilter_demo",meanImage)

src=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg')
cv.imshow("Saber",src)
mean_Filter(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

中值滤波:

中值滤波对椒盐噪声很有效,因此先对原图加入椒盐噪声来验证中止滤波的效果。在matlab中,存在执行直接得函数来添加高斯噪声和椒盐噪声。Python版本的OpenCV中虽然不存在直接得函数,但是很容易使用相关的函数来实现。

加入椒盐噪声函数:

import cv2
import numpy as np

#椒盐噪声
def PepperandSalt(src,percetage):
    NoiseImg=src
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(NoiseNum):
        randX=np.random.random_integers(0,src.shape[0]-1)
        randY=np.random.random_integers(0,src.shape[1]-1)
        if np.random.random_integers(0,1)<=0.5:
            NoiseImg[randX,randY]=0
        else:
            NoiseImg[randX,randY]=255
    return NoiseImg

 

对椒盐噪声滤波:

 

高斯滤波:

函数:cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

参数ksize高斯核大小。ksize.width和ksize.height可以不同,但两者都必须正的和奇数的。或者,它们可以是零,然后根据sigma计算归一化后的权重。

参数sigmaX高斯核在X方向的标准偏差。参数sigmaY高斯核在Y方向的标准偏差。

如果sigmaY为零,则设置为等于sigmaX,如果两个sigma都是零,则从ksize.width和ksize.height计算,分别(详情请参见GetGaussiankernel);无论以后可能会修改所有这些语义,建议指定所有ksize,SigmaX和SigmaY。

(ksize与sigma数学推导计算还可参考:此处

情况一:指定ksize.width和ksize.height,sigma的情况,效果如下:

import cv2 as cv

def gaussian_Filter(image):
    #高斯滤波
    #第一个参数为输入图像,第二个参数为卷积核大小,后面的为标准方差σ
    gaussianImage=cv.GaussianBlur(image,(5,5),2)
    cv.imshow("gaussian_demo",gaussianImage)

src=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg')
cv.imshow("src",src)
gaussian_Filter(src)
cv.waitKey(0)
cv.destroyAllWindows()

情况二:gaussianImage=cv.GaussianBlur(image,(0,0),2)ksize.width和ksize.height它们是零,然后根据sigma计算归一化后权重,效果如下:

情况三:gaussianImage=cv.GaussianBlur(image,(5,5),0)此时标准差sigma都是零,则从ksize.width和ksize.height计算归一化权重,效果如下:

 

图像自定义滤波:

函数:cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

import cv2 as cv
import numpy as np

def self_Filter(image):
    #自定义一个锐化滤波器
    kernel1=np.ones((3,3),np.float)
    kernel2=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float)
    #filter2D参数-1表示和原图像位深一致
    dstImage1=cv.filter2D(image,-1,kernel1)
    dstImage2=cv.filter2D(image,-1,kernel2)
    cv.imshow("dstImage1",dstImage1)
    cv.imshow("dstImage2",dstImage2)
src=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg')
cv.imshow("Saber",src)
self_Filter(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

 

EPF边缘保持滤波器:

 

高斯双边滤波:

函数说明:

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

src:源8位或浮点、1通道或3通道图像。dst与大小和类型相同的dst目标映像。

d:过滤过程中使用的每个像素邻域的参数d直径。如果不是阳性,它是根据sigmaspace计算的。

sigma color:颜色空间中的参数sigma color过滤器sigma。参数的较大值意味着 像素邻域(参见sigmaspace)中的更多颜色将混合在一起,从而在较大的半等色区域。

sigmaSpace:坐标空间中的参数sigma space过滤器sigma。参数的较大值意味着只要像素的颜色足够接近,像素越远,就会相互影响(参见sigmacolor)。

参数borderType边框模式用于在图像外部外推像素,请参见borderType。

import cv2 as cv
import numpy as np

#两个边缘保持滤波:
def bilater_Filter(image):
    #1.高斯双边滤波
    bilateralImage=cv.bilateralFilter(image,0,100,20)
    cv.imshow("bilateral_demo",bilateralImage)
src=cv.imread(r'F:\OutputResult\SrcImage\face1.jpg')
cv.imshow("face",src)
meanShift_Filter(src)
cv.waitKey(0)
cv.destroyAllWindows()

可以看到下面水印和边缘被保留,其余部分被滤波。

 

均值漂移滤波:

cv.pyrMeanShiftFiltering(src, sp, sr[, dst[, maxLevel[, termcrit]]])

函数说明:

参数1:src源8位3通道图像。

参数2:dst与源具有相同格式和大小的目标图像。

参数3:sp空间窗口半径。

参数4:sr颜色窗口半径。

可选参数:

参数maxlevel:用于分割的棱锥图的参数maxlevel最大级别。

参数termcrit终止条件:何时停止Meanshift迭代。

均值漂移除了可以用于滤波,还可以进行图像分割,即利用其滤波后的结果对其不同的区域进行漫水填充。

import cv2 as cv
import numpy as np

def meanShift_Filter(image):
    #2.均值漂移滤波
    sp=10
    sr=50
    maxlevel=1
    meanshiftImage=cv.pyrMeanShiftFiltering(image,sp,sr,maxlevel)
    cv.imshow("meanShift_demo",meanshiftImage)
src=cv.imread(r'F:\OutputResult\SrcImage\face1.jpg')
cv.imshow("face",src)
meanShift_Filter(src)
cv.waitKey(0)
cv.destroyAllWindows()

 

 

参考文献:

https://www.cnblogs.com/shine-lee/p/9671253.html

https://docs.opencv.org/4.1.0/d4/d86/group__imgproc__filter.html#gac05a120c1ae92a6060dd0db190a61afa

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值