1、均值滤波
任意一点的像素值,都是周围N*N个像素值的均值
如上图是一个图片的像素分布,红色区域226,红色可以作为周围NN个像素的均值
例:选取55的区域,红色区域的像素新值=蓝色背景区域像素值之和除25
中间部分称为:核。每一个都是1/25, 核根据要取多少N*N决定
针对原始图像内的像素点,逐个采用核进行处理,得到结果图像.
使用函数:处理结果=cv2.blur(原始图像,核大小)
处理结果=cv2.blur(原始图像,核大小)
r=cv2.blur(a,(5,5))
核大小:以(宽度,高度)形式表示的元组
import cv2
o=cv2.imread(r'D:\image\lenacolor.png')
r=cv2.blur(o,(20,20)) #核(1,1若)就是原图像
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()
2、方框滤波
函数boxFilter
处理结果=cv2.boxFilter(原始图像,目标图像深度,核大小,normalize属性)
目标图像深度: int类型的目标图像深度。通常使用“-1”表示与原始图像一致。
normalize属性:是否对目标图像进行归一化处理。
normalize = true,进行归一化处理,与均值滤波相同
normalize = false,不进行归一化处理,对周边像素求和,会超过255,图像称白色
import cv2
o=cv2.imread(r'D:\image\logo.png')
r=cv2.boxFilter(o,-1,(5,5))#默认normalize = true
r1=cv2.boxFilter(o,-1,(5,5),normalize=0)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.imshow('r1',r)
cv2.waitKey()
cv2.destroyAllWindows()
3、高斯滤波
让临近的像素具有更高的重要度。对周围像素计算加权平均值,较近的像素具有较大的权重值。给周围的像素加一个权重,像素乘以权重后的和为中间新的像素值。
与均值滤波不同的周围是每个像素有了权重,离中心越近权重越大,越远权重越小让临近的像素具有更高的重要度。对周围像素计算加权平均值,较近的像素具有较大的权重值。
使用函数GaussianBlur函数
dst=cv2.GaussianBlur(src,ksize,sigmaX)
src:原始图像
ksiez:核大小(N,N)必须是奇数
sigmaX:X方向方差,控制权重,一般令sigmaX=0,会自己计算方差:sigma=0.3*((ksize-1)*0.5-1)+0.8
r=cv2.GaussianBlur(o,(3,3),0)
Y方向的方差与X方向一致
import cv2
o=cv2.imread(r'D:\image\lenacolor.png')
r=cv2.GaussianBlur(o,(5,5),0)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()
4、中值滤波
先取(N*N),让临近的像素按照大小排列,取排序像素集中位于中间位置的值作为中值滤波后的像素值。
使用medianBlur函数
dst = cv2.medianBlur(src,ksize)
ksize :核大小,必须是比1大的奇数,如3,5,7等,只是一个数字
r=cv2.medianBlur(o,3)
import cv2
o=cv2.imread(r'D:\image\lenacolor.png')
r=cv2.medianBlur(o,5)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()