OpenCV Python - 图像滤波



图像基本上是由0到255之间的二进制值表示的像素矩阵,这些值对应于灰度值。彩色图像是具有对应于RGB通道数量的三维矩阵。

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

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

OpenCV库提供`cv2.filter2D()`函数。它使用大小为3x3或5x5等的方形矩阵内核对原始图像进行卷积。

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

对所有像素执行此操作以获得输出图像像素矩阵。请参考下图:

Pixel Matrix

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

示例

下图使用此函数通过二维卷积获得平均图像。相应的程序如下:

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()

输出

Pixel Matrix

滤波函数类型

OpenCV中的其他滤波函数包括:

  • 双边滤波器 (BilateralFilter) - 减少不需要的噪声,同时保持边缘完整。

  • 方框滤波器 (BoxFilter) - 这是一种平均模糊操作。

  • 高斯模糊 (GaussianBlur) - 消除高频内容,例如噪声和边缘。

  • 中值滤波器 (MedianBlur) - 它不取平均值,而是取内核下所有像素的中值,并替换中心值。

广告