opencv 图像平滑处理
1.均值滤波
简单的均值卷积操作
#(3,3)表示3*3大小的矩阵
#只能是奇数
blur = cv2.blur(img,(3,3))
2.方框滤波
近似于均值滤波
box = cv2.boxFilter(img,-1,(3,3),normalize = Ture)
normalize = False 使均值滤波最后不再除以个数,会使像素值越界,越界的默认255
3.高斯滤波(正态分布)
离中间值越近的权重越大
[ 0.5 , 0.8 , 0.5
0.8 , 1 , 0.8
0.5 , 0.8 , 0.5]
aussian = cv2.GaussianBlur(img,(5,5),1)
4.中值滤波
将设定的矩阵里的数从小到大排序,中间值在矩阵正中央
形态学
腐蚀操作
可以去毛刺,也可以把线条变细
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iteration = 1)
膨胀操作
线条变粗
kernel = np.ones((3,3),np.uint8)
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)
开运算与闭运算
开运算:先腐蚀,再膨胀
opening = cv2.morphologyEX(img,cv2.MORPH_OPEN,kernel)
闭运算:先膨胀,再腐蚀
closin = cv2.morphologyEX(img,cv2.MORPH_CLOSE,kernel)
梯度运算:膨胀 - 腐蚀
gradient = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
礼帽与黑帽
礼帽 = 原始输入 - 开运算输入
黑帽 = 闭运算 - 原始输入
#礼帽
tophat = cv2.morphology(img,cv2.MORPH_TOPHAT,kernel)
#黑帽
blackhat = cv2.morphology(img,cv2.MORPH_BLACKHAT,kernel)