#方框滤波
#有一个参数normalize,表示在进行滤波时是否进行归一化,为1表示要进行
#归一化处理,为0表示不需要,直接使用领域像素值的和即可
import cv2
img=cv2.imread('./image/zaosheng.png')
#默认情况下,normalize的值为1,效果与均值滤波一样
r=cv2.boxFilter(img,-1,(5,5))
cv2.imshow('original',img)
cv2.imshow('rst',r)
cv2.waitKey()
cv2.destroyWindow()
输出:
#针对噪声图像,在方框滤波函数cv2.boxFilter()内将参数normalize的值设置为0,显示滤波结果
import cv2
img=cv2.imread('./image/zaosheng.png')
#在本例中没有对图像进行归一化处理
#进行滤波时计算的是5*5的领域的像素值之和,图像的像素值基本都会超过当前像素值的最大值
r=cv2.boxFilter(img,-1,(5,5),normalize=0)
cv2.imshow('original',img)
cv2.imshow('rst',r)
cv2.waitKey()
cv2.destroyWindow()
输出:
#高斯滤波
#会将中心点的权重值加大,远离中心点的而权重值减小,在此基础上计算各个不同领域内像素值不同权#重值的和
import cv2
img=cv2.imread('./image/zaosheng.png')
r=cv2.boxFilter(img,-1,(2,2),normalize=0)
cv2.imshow('original',img)
cv2.imshow('rst',r)
cv2.waitKey()
cv2.destroyWindow()
输出:
#中值滤波,将领域内的像素值进行排序,然后取中间值,因为要排序,所以耗费时间比较长
import cv2
img=cv2.imread('./image/zaosheng.png')
r=cv2.medianBlur(img,3)
cv2.imshow('original',img)
cv2.imshow('rst',r)
cv2.waitKey()
cv2.destroyWindow()
输出:
#针对噪声图像,对其进行双边滤波
import cv2
img=cv2.imread('./image/zaosheng.png')
#第一个参数src,第二个d表示滤波时选取的空间距离参数,表示以当前像素点为中心的直径
#sigmaColor:滤波处理时选取的颜色差值范围
#sigmaSpace:坐标空间中的sigma值
r=cv2.bilateralFilter(img,25,100,100)
cv2.imshow('original',img)
cv2.imshow('rst',r)
cv2.waitKey()
cv2.destroyWindow()
输出:
#双边滤波的优势在于对边缘信息的处理
#分别使用高斯滤波以及双边滤波对图片进行处理
import cv2
img=cv2.imread('./image/BW.jpg')
r1=cv2.GaussianBlur(img,(5,5),0,0)
r2=cv2.bilateralFilter(img,55,100,100)
cv2.imshow('original',img)
cv2.imshow('r1',r1)
cv2.imshow('r2',r2)
cv2.waitKey()
cv2.destroyWindow()
输出:
#2D卷积
#允许用户使用自定义卷积
import cv2
import numpy as np
cov=np.ones((9,9),np.float32)/81
img=cv2.imread('./image/zaosheng.png')
r=cv2.filter2D(img,-1,cov)
cv2.imshow('original',img)
cv2.imshow('Guassian',r)
cv2.waitKey()
cv2.destroyWindow()
输出:
#使用数组演示腐蚀的基本原理
#只有当Kernel的中心点位于img中的img[2,1],img[2,2],img[2,3]
#处时,核才完全处于前景图像中.所以,在腐蚀结果图像中,只有这三个点的值为1,其余点的值皆为0
import cv2
import numpy as np
img=np.zeros((5,5),np.uint8)
img[1:4,1:4]=1
kernel=np.ones((3,1),np.uint8)
erison=cv2.erode(img,kernel)
print('img=\n',img)
print('kernel=\n',kernel)
print('erison=\n',erison)
输出:
img=
[[0 0 0 0 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 0 0 0 0]]
kernel=
[[1]
[1]
[1]]
erison=
[[0 0 0 0 0]
[0 0 0 0 0]
[0 1 1 1 0]
[0 0 0 0 0]
[0 0 0 0 0]]
#使用cv2.erode()完成图像腐蚀
#只有完全在前景图像内,才会实现赋值为1
import cv2
import numpy as np
o=cv2.imread('./image/erode.jpeg')
kernel=np.ones((5,5),np.uint8)
erosion=cv2.erode(o,kernel)
cv2.imshow('original',o)
cv2.imshow('erosion',erosion)
cv2.waitKey()
cv2.destroyWindow()
输出:
#调节函数cv2.erode()的参数,观察不同参数控制下的图像腐蚀效果
import cv2
import numpy as np
o=cv2.imread('./image/erode.jpg',-1)
kernel=np.ones((9,9),np.uint8)
#iterations是腐蚀操作迭代的次数,默认为1,表示只进行一次腐蚀操作
erision=cv2.erode(o,kernel,iterations=5)
cv2.imshow('original',o)
cv2.imshow('erosion',erision)
cv2.waitKey()
cv2.destroyWindow()
输出: