一、均值滤波器 cv2.blur()
img = cv2.blur(src=*,ksize=*,anchor=*,borderType=*)
img:目标图像。
src:原始图像。
ksize:滤波核大小,(width,height)。
anchor:滤波核锚点,默认为:(-1,-1)核的中心。
borderType:边界样式,一般填默认即可。
import cv2
lena = cv2.imread('Lena_D.png')[::2,::2,:]
img1 = cv2.blur(src=lena,ksize=(3,3))
img2 = cv2.blur(src=lena,ksize=(5,5))
img3 = cv2.blur(src=lena,ksize=(7,7))
cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、方框滤波 cv2.boxFilter()
img = cv2.boxFilter(src=*,ddepth=*,ksize=*,anchor=*,normalize=*,borderType=*)
ddepth:图像深度(channel 数),默认:-1,与原始图像深度相同。
normalize:是否归一化处理。1表示归一化; 0表示不归一化,将核内像素做 add 操作,像素最大值为255。
img:目标图像。
src:原始图像。
ksize:滤波核大小,(width,height)。
anchor:滤波核锚点,默认为:(-1,-1)核的中心。
borderType:边界样式,一般填默认即可。
import cv2
lena = cv2.imread('Lena_D.png')[::2,::2,:]
img1 = cv2.boxFilter(src=lena,ksize=(3,3),normalize=1)
img2 = cv2.boxFilter(src=lena,ksize=(3,3),normalize=0)
cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、中值滤波器 cv2.medianBlur()
取滤波核内像素值排序的中间值。
img = cv2.medianBlur(src=*,ksize=*)
img:目标图像。
src:原始图像。
ksize:滤波核边长,如:3、5、7等。
import cv2
lena = cv2.imread('Lena_D.png')[::2,::2,:]
img1 = cv2.medianBlur(src=lena,ksize=3)
img2 = cv2.medianBlur(src=lena,ksize=5)
img3 = cv2.medianBlur(src=lena,ksize=7)
cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img2',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、高斯滤波器
滤波核内的数值符合高斯分布。
img = cv2.GaussianBlur(src=*,ksize=*,sigmaX=*,sigmaY=*,borderType=*)
img:目标图像。
src:原始图像。
ksize:高斯滤波核大小,(width,height)必须为奇数。
sigmaX、sigmaY:水平与竖直方向的标准偏差。
borderType:边界样式,一般填默认即可。
import cv2
lena = cv2.imread('Lena_D.png')[::2,::2,:]
img1 = cv2.GaussianBlur(src=lena,ksize=(3,3),sigmaX=0,sigmaY=0)
img2 = cv2.GaussianBlur(src=lena,ksize=(5,5),sigmaX=0,sigmaY=0)
img3 = cv2.GaussianBlur(src=lena,ksize=(7,7),sigmaX=0,sigmaY=0)
cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
五、自定义滤波核 cv2.filter2D()
img = cv2.filter2D(src=*,ddepth=*,kernel=*,anchor=*,delta=*,borderType=*)
img:目标图像。
src:原始图像。
ddepth:目标图像深度,默认为:-1,与原始图像深度相同。
kernel:自定义滤波核,(width,height),Opencv 只提供了单通道矩阵。
delta:偏置项。默认为:0。
anchor:滤波核锚点,默认为:(-1,-1)核的中心。
borderType:边界样式,一般填默认即可。
import cv2
import numpy as np
lena = cv2.imread('Lena_D.png')[::2,::2,:]
# 可以自行定义更复杂的滤波核
kernel_3 = np.ones((3,3),np.float32)/(3*3)
img1 = cv2.filter2D(src=lena,ddepth=-1,kernel=kernel_3)
kernel_5 = np.ones((5,5),np.float32)/(5*5)
img2 = cv2.filter2D(src=lena,ddepth=-1,kernel=kernel_5)
cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()