cv.filter2D()将一个内核与图像进行卷积运算。
取内核与像素的平均值,用新的平均值替代中心像素。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('opencv_logo.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
图像模糊
图像模糊是将图像与低通滤波器内核卷积来实现的,从图像中删除了高频内容。
平均
cv.blur()与cv.boxFilter()来完成
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('opencv-logo-white.png')
blur = cv.blur(img,(5,5))
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
高斯模糊
cv.GaussianBlur()
blur = cv.GaussianBlur(img,(5,5),0)
中值模糊
中间元素被替换为中值
cv.medianBlur()
median = cv.medianBlur(img,5)
双边模糊
双边模糊既可以去掉噪声,又可以保持边缘锐利,但是速度比较慢。
高斯模糊考虑附近的像素,不考虑是否是一个边缘像素,所以模糊了边缘。
双边模糊则考虑了边缘
blur = cv.bilateralFilter(img,9,75,75)