您的位置:首页 > 编程语言 > Python开发

vim+python+OpenCV学习六 : 滤波初级

2016-03-05 22:39 477 查看
#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()

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: