均值滤波
根据核的大小(rowcol),每个像素值就等于以此像素为中心的周围rowcol个像素的平均值。核大一点,显然越平滑、模糊。
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("C:\\imgs\\lenacolor.png", cv2.IMREAD_UNCHANGED)
result = cv2.blur(img, (15, 15))
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)
result = cv2.blur(img, (7, 7))
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
方框滤波
normalize=true的时候,效果同均值滤波;normalize=false的时候,α=1,仅求和。
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)
result1 = cv2.boxFilter(img, -1, (3,3), normalize=0)
result2 = cv2.boxFilter(img, -1, (6,6), normalize=1)
cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
cv2.waitKey()
cv2.destroyAllWindows()
高斯滤波
与均值滤波对比,其实还是利用周围的元素,不过周围每个元素的权重不同。核宽度和高度必须是奇数。
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)
result = cv2.GaussianBlur(img, (15, 15), 0)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
中值滤波
medianBlur()
依据核大小,选取以某个像素为中心的那些像素的中位数作为本像素的值。本滤波,核宽度核高度是相同的,只需要指明边长。
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)
result = cv2.medianBlur(img, 3)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
去椒盐效果确实比以上几个滤波都好。。。