Opencv Python 简明教程

OpenCV Python - Image Filtering

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

图像滤波是对像素值进行平均的过程,目的是改变原始图像的色调、亮度、对比度等。

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

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

卷积将一个内核矩阵横向和纵向滑动跨越图像矩阵。对于每个位置,将内核下方的所有像素相加,取内核下方的像素的平均值,并将中心像素替换为平均值。

对所有像素执行此操作以获取输出图像像素矩阵。参考如下给出的图表 −

pixel matrix

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

Example

下图使用此函数获得二维卷积的平均图像结果。相关的程序如下 −

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

Output

pixel matrixs

Types of Filtering Function

OpenCV 中的其他类型滤波功能包括 −

  1. BilateralFilter − 减少不需要的噪声,保持边缘不变。

  2. BoxFilter − 这是一个平均模糊操作。

  3. GaussianBlur − 消除高频成分,如噪声和边缘。

  4. MedianBlur − 它不取平均值,而取内核下方所有像素的中位数并替换中心值。