如何使用Python中的OpenCV计算图像的形态梯度?
形态梯度计算为图像膨胀和腐蚀的差值。我们使用cv2.morphologyEx()方法来计算形态梯度。形态梯度用于分割、边缘检测和查找物体的轮廓。
语法
以下是此方法使用的语法:
cv2.morphologyEx(img, op, kernel)
其中:
img - 原始输入图像。
op - 形态运算的类型。我们使用cv2.MORPH_GRADIENT。
kernel - 卷积核。我们可以将卷积核定义为一个全为1的numpy矩阵,数据类型为uint8。
步骤
您可以使用以下步骤计算图像的形态梯度:
导入所需的库。在以下所有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()
我们将使用以下图像作为本程序的输入文件。
输出
运行上述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()
我们将使用以下图像作为本程序的输入文件。
输出
执行上述程序后,将生成三个输出窗口。三个不同的窗口对应于使用不同卷积核大小的三个不同的形态梯度图像。注意三个输出之间的差异。
广告