如何利用Python中的OpenCV计算图像的形态梯度?

如何利用Python中的OpenCV计算图像的形态梯度?

形态梯度是通过对图像进行膨胀和腐蚀的差异来计算得到的。我们使用 cv2.morphologyEx() 方法来计算形态梯度。形态梯度在分割、边缘检测和查找物体轮廓时使用。

语法

以下是此方法使用的语法 –

cv2.morphologyEx(img, op, kernel)

其中,

  • img - 原始输入图像。

  • op - 形态学操作的类型。我们使用 cv2.MORPH_GRADIENT

  • kernel - 内核。我们可以将内核定义为所有值为 dtype uint8 的NumPy矩阵。

步骤

您可以使用以下步骤计算图像的形态梯度 –

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

import cv2

使用 cv2.imread() 读取输入图像作为灰度图像。

img = cv2.imread('floor.jpg', 0)

使用 cv2.morphologyEx() 计算形态梯度。传递所需大小的内核。

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

使用 cv2.imshow() 方法显示梯度图像。

cv2.imshow("Morphological Gradient", gradient)
cv2.waitKey()
cv2.destroyAllWindows()

让我们看一些示例,以便更好的理解。

示例 1

在此Python示例中,我们使用2×2内核计算输入图像的形态梯度。

#导入所需库
import cv2
import numpy as np

#读取输入图像
img = cv2.imread('floor.jpg', 0)

#定义内核
kernel = np.ones((2,2),np.uint8)

#计算形态梯度
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

#显示梯度图像
cv2.imshow("Morphological Gradient", gradient)
cv2.waitKey()
cv2.destroyAllWindows()

我们将使用以下图像作为程序的输入文件输出

当您运行上述Python程序时,将生成以下输出窗口 –

如何利用Python中的OpenCV计算图像的形态梯度?

示例 2

在本示例中,我们使用三个不同的内核 – 2×2、3×3和5×5内核计算输入图像的形态梯度。

import cv2
import numpy as np

img = cv2.imread('tutorialspoint.png',0)

kernel1 = np.ones((2,2),np.uint8)
gradient1 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel1)

kernel2 = np.ones((3,3),np.uint8)
gradient2 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel2)

kernel3 = np.ones((5,5),np.uint8)
gradient3 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel3)

cv2.imshow("形态梯度内核= 2x2", gradient1)
cv2.imshow("形态梯度内核= 3x3", gradient2)
cv2.imshow("形态梯度内核= 5x5", gradient3)

cv2.waitKey(0)
cv2.destroyAllWindows()

我们将使用以下图像作为此程序的 输入文件

如何利用Python中的OpenCV计算图像的形态梯度?

输出

当您执行以上程序时,它将生成 三个输出窗口 。三个不同的窗口对应于使用不同内核大小的三个不同形态梯度图像。请注意三个输出之间的差异。

如何利用Python中的OpenCV计算图像的形态梯度?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV