如何使用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()

我們將使用以下影像作為本程式的輸入檔案

輸出

執行上述程式後,將生成三個輸出視窗。三個不同的視窗對應於使用不同卷積核大小的三個不同的形態梯度影像。注意三個輸出之間的差異。

更新於:2022年9月27日

瀏覽量:767

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告