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

opencvpythonserver side programmingprogramming

形态梯度计算为图像的膨胀和腐蚀之间的差异。我们使用 cv2.morphologyEx() 方法计算形态梯度。形态梯度用于分割、边缘检测和查找对象的轮廓。

语法

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

cv2.morphologyEx(img, op, kernel)

其中,

  • img − 原始输入图像。

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

  • kernel − 内核。我们可以将内核定义为所有 dtye 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 required libraries import cv2 import numpy as np # read the input image img = cv2.imread('floor.jpg', 0) # define the kernel kernel = np.ones((2,2),np.uint8) # compute the morphological gradient gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) # display the gradient image cv2.imshow("Morphological Gradient", gradient) cv2.waitKey() cv2.destroyAllWindows()

We will use the following image as the Input File for this program.

输出

运行上述 Python 程序时,它将生成以下输出窗口 -

示例 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("Morphological Gradient kernel= 2x2", gradient1) cv2.imshow("Morphological Gradient kernel= 3x3", gradient2) cv2.imshow("Morphological Gradient kernel= 5x5", gradient3) cv2.waitKey(0) cv2.destroyAllWindows()

We will use the following image as the Input File for this program −

输出

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


相关文章