如何利用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程序时,将生成以下输出窗口 –
示例 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()
我们将使用以下图像作为此程序的 输入文件 :
输出
当您执行以上程序时,它将生成 三个输出窗口 。三个不同的窗口对应于使用不同内核大小的三个不同形态梯度图像。请注意三个输出之间的差异。