如何使用 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 −
输出
执行上述程序时,它将生成三个输出窗口。三个不同的窗口对应使用不同内核大小的三个不同形态梯度图像。注意三个输出之间的差异。