如何使用OpenCV Python应用自定义滤波器(2D卷积)?
在本教程中,我们将看到如何应用两种不同的低通滤波器以平滑图像(从图像中去除噪音)。这两个滤波器是 filter2D 和 boxFilter 。这些滤波器是空间中的2D滤波器。
将2D滤波器应用于图像也称为“2D卷积操作”。这些滤波器通常称为平均滤波器。
这些滤波器的主要缺点是它们也平滑图像中的边缘。如果您不想平滑边缘,则可以应用“双边滤波器”。双边滤波器操作保留边缘。
语法
以下是 Filter2D 和 BoxFilter 的语法
参数
- img - 要应用滤波器操作的输入图像。
-
ddepth - 输出图像的所需深度。如果 “depth=-1”,则返回具有与输入图像相同深度的输出图像。
-
kernel - 卷积核。在 filter2D 中,我们将卷积核作为 numpy 数组传递。
-
ksize - 卷积核的大小。在 boxFilter 中,我们仅传递元组作为卷积核大小。
步骤
为执行双边滤波器操作,您可以按照以下步骤操作-
导入所需的库。在所有以下 Python 示例中,所需的 Python 库是 OpenCV 。确保您已经安装了它。
读取输入图像并将其转换为灰度图像。
在filter2D中定义内核以应用滤波器。
在输入图像上应用filter2D或boxFilter滤波。我们将ddepth、kernel或ksize作为参数传递给filter函数。
显示过滤后的图像。
让我们看一下在输入图像上执行filter2D和boxFilter操作的示例。
我们将使用以下图像作为所有下面的 输入文件 的例子。
示例 1
在此Python程序中,我们使用5×5内核对输入图像应用 filter2D 。
输出
执行上述代码后,将生成以下输出窗口 –
上述输出图像是使用 cv2.filter2D() 应用平均值滤波器后获得的。
示例2
在下面的 Python 示例中,我们使用 5×5 的核对输入图像应用了 boxFilter 操作。
输出
执行上述代码后,将生成以下输出窗口 –
上述输出图像是使用 cv2.boxFilter() 应用平均值滤波器后获得的。