高通滤波可以找到图像的边缘。低通滤波可以去除噪音,模糊图像。
自定义滤波器 cv2.filter2D()
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('img1.png')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
kernel = np.ones((5, 5), np.float32) / 25
dst = cv2.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()
图像模糊(图像平滑)
使用低通滤波器可以达到图像模糊的目的(就是去除图像中的高频成分(比如:噪音,边界))
cv2.blur()
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('img1.png')
blur = cv2.blur(img, (5, 5))
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur=cv2.cvtColor(blur,cv2.COLOR_BGR2RGB)
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()
高斯模糊 cv2.GaussianBlur()
高斯核可以有效去除高斯噪音
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('img1.png')
# 0 是指根据窗口大小 (5,5) 来计算高斯函数标准差
blur = cv2.GaussianBlur(img, (5, 5), 0) # 高斯模糊
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur=cv2.cvtColor(blur,cv2.COLOR_BGR2RGB)
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()
中值模糊 cv2.medianBlur(img,5)
使用像素的中值替代像素的值。这个可以去除椒盐噪声。
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('img1.png')
blur = cv2.medianBlur(img, 5) # 中值模糊
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur=cv2.cvtColor(blur,cv2.COLOR_BGR2RGB)
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()