#coding=utf-8
#用低通滤波来平滑图像,低通滤波器的目标是降低图像的变化率。
#将每个像素替换为该像素周围像素的均值。
#这样就可以平滑并替代那些强度变化明显的区域
import cv2
img=cv2.imread('test5.jpg')
'''
其中dst是blur处理后返回的图像,参数一是输入的待处理图像,
参数2是低通滤波器的大小。其后含有几个可选参数,
用来设置滤波器的细节,
下面这个滤波器也可以达到同样的效果
result1 = cv2.boxFilter(img, -1, (5, 5))
'''
result1=cv2.blur(img,(5,5)) #这个是低通滤波器
result2=cv2.blur(img,(15,15)) #这个是低通滤波器
cv2.imshow('Origin',img)
cv2.imshow('Blur5*5',result1)
cv2.imshow('Blur15*15',result2)
cv2.waitKey(0)
cv2.destroyAllWindows()
#coding=utf-8
#高斯滤波的效果比低通滤波的效果好很多,辨识度要高
'''
高斯模糊:
在某些情况下,需要对一个像素的周围的像素给予更多的重视。
因此,可通过分配权重来重新计算这些周围点的值。
这可通过高斯函数(钟形函数,即喇叭形数)的权重方案来解决。
低通滤波与高斯滤波的不同之处在于:低通滤波中,滤波器中每个像素的权重是相同的,
即滤波器是线性的。而高斯滤波器中像素的权重与其距中心像素的距离成比例。
'''
import cv2
img=cv2.imread('test5.jpg')
gaussianResult1 = cv2.GaussianBlur(img,(5,5),1.5) #这个是高斯滤波器
gaussianResult2 = cv2.GaussianBlur(img,(15,15),1.5)
cv2.imshow('Origin',img)
cv2.imshow('GaussianBlur(img,(5,5),1.5)',gaussianResult1)
cv2.imshow('GaussianBlur(img,(15,15),1.5) ',gaussianResult2)
cv2.waitKey(0)
cv2.destroyAllWindows()
#coding=utf-8
import numpy as np
'''
中值滤波:
前面介绍的是线性过滤器,这里介绍非线性过滤器——中值滤波器。
由于中值滤波器对消除椒盐现象特别有用。所以我们使用
椒盐函数先对图像进行处理,将处理结果作为示例图片。
函数返回处理结果,第一个参数是待处理图像,第二个参数是孔径的尺寸,
一个大于1的奇数。
比如这里是5,中值滤波器就会使用5×5的范围来计算。即对像素的中心值及其5×5邻域组成
了一个数值集,对其进行处理计算,当前像素被其中值替换掉。
'''
import cv2
def salt(img, n):
for k in range(n):
i = int(np.random.random() * img.shape[1]);
j = int(np.random.random() * img.shape[0]);
if img.ndim == 2:
img[j,i] = 255
elif img.ndim == 3:
img[j,i,0]= 255
img[j,i,1]= 255
img[j,i,2]= 255
return img
img=cv2.imread('test5.jpg')
result = salt(img, 500)
median = cv2.medianBlur(result, 3) #这个是中值滤波
cv2.imshow('Salt',result)
cv2.imshow('MedianBlur ',median)
cv2.waitKey(0)
cv2.destroyAllWindows()