OpenCV Python - 图像过滤

图像基本上是一个像素矩阵,由对应于灰度值的 0 到 255 之间的二进制值表示。 彩色图像将是一个三维矩阵,其中包含与 RGB 对应的多个通道。

图像过滤是对像素值进行平均以改变原始图像的阴影、亮度、对比度等的过程。

通过应用低通滤波器,我们可以去除图像中的任何滤波。 高通滤波器帮助检测边缘。

OpenCV 库提供了cv2.filter2D() 函数。 它通过大小为 3X3 或 5X5 等的方阵的内核对原始图像执行卷积。

卷积在图像矩阵上水平和垂直滑动核矩阵。 对于每个放置,将内核下的所有像素相加,取内核下像素的平均值,并用平均值替换中心像素。

对所有像素进行此操作,得到输出图像像素矩阵。 请参考下图 −

像素矩阵

cv2.filter2D() 函数需要输入数组、内核矩阵和输出数组参数。


示例

下图使用此函数获得平均图像作为 2D 卷积的结果。 相同的程序如下 −

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('opencv_logo_gs.png')
kernel = np.ones((3,3),np.float32)/9
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('Convolved')
plt.xticks([]), plt.yticks([])
plt.show()

输出

像素矩阵

过滤函数的类型

OpenCV中其他类型的过滤函数包括 −

  • BilateralFilter − 减少不需要的滤波,保持边缘完整。

  • BoxFilter − 这是平均模糊操作。

  • GaussianBlur − 消除噪声和边缘等高频内容。

  • MedianBlur − 它取内核下所有像素的中值代替中心值,而不是平均值。