如何在使用Python的OpenCV中对图像执行双边滤波操作?


双边滤波操作在图像平滑和去除噪声方面非常有效。双边滤波的主要优点是它可以保留边缘,这与平均滤波和中值滤波不同。与其他滤波器相比,双边滤波操作速度较慢。我们可以使用`cv2.bilateralFilter()`方法对图像执行双边滤波。

语法

以下是此方法的语法。

cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace)

此方法接受以下**参数**:

  • **img** − 应用双边滤波操作的输入图像。

  • **d** − 整型变量,表示像素邻域的直径。

  • **sigmaColor** − 整型值,表示颜色空间中的滤波器sigma。值越大,彼此越远的颜色就越容易混合。

  • **sigmaSpace** − 整型值,表示坐标空间中的滤波器sigma。值越大,越远的像素越容易混合,前提是它们的顏色在sigmaColor范围内。

步骤

要执行双边滤波操作,您可以按照以下步骤操作:

导入所需的库。在以下所有Python示例中,所需的Python库是**OpenCV**。请确保您已经安装了它。

import cv2

读取输入图像。

img = cv2.imread('birds.jpg')

对输入图像应用双边滤波。我们将d、sigmaColor和sigmaSpace分别作为9、15和15传递给函数。

bilateral = cv2.bilateralFilter(img, 9, 75, 75)

显示双边滤波后的图像。

cv2.imshow('bilateral.jpg', bilateral)
cv2.waitKey(0)
cv2.destroyAllWindows())

示例

让我们来看一个对输入图像执行双边滤波操作的示例。

import cv2 # Read the image. img = cv2.imread('birds.jpg') # Apply bilateral filter with d = 9, # sigmaColor = sigmaSpace = 75. bilateral = cv2.bilateralFilter(img, 9, 75, 75) # display the output cv2.imshow('bilateral.jpg', bilateral) cv2.waitKey(0) cv2.destroyAllWindows()

我们将在本程序中使用以下图像作为**输入文件**:

输出

执行上述代码后,将产生以下输出:

We applied bilateral filter with d=9, sigmaColor=55 and sigmaSpace=55

并且,我们将得到以下输出窗口:

注意输入图像和双边滤波后图像之间的差异。

更新于:2022年9月28日

1K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告