如何在 OpenCV Python 中檢查影像輪廓是否為凸的?


函式 cv2.isContourConvex() 用於檢查曲線(輪廓)是否為凸的。影像中物體的輪廓是沿邊界連線所有連續點的曲線,具有相同的顏色或強度。輪廓用於形狀分析以及物體檢測和識別等。

語法

cv2.isContourConvex() 的語法如下:

cv2.isContourConvex(cnt)

其中,“cnt”是影像中物體輪廓點的 NumPy 陣列。如果輪廓 cnt 為凸的,則返回 True,否則返回 False

步驟

您可以使用以下步驟來檢查影像中的輪廓是否為凸的:

匯入所需的庫。在以下所有 Python 示例中,所需的 Python 庫為 OpenCV。確保您已安裝它。

import cv2

使用 cv2.imread() 讀取輸入影像並將其轉換為灰度影像。

img = cv2.imread('pentagon.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

對灰度影像應用閾值處理以建立二值影像。

ret,thresh = cv2.threshold(gray,150,255,0)

使用 cv2.findContours() 函式查詢影像中的輪廓。

contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

使用 cv2.isContourConvex(cnt) 計算凸性。如果輪廓為凸的,則返回 True,否則返回 False。

cnt= contours[0]
k = cv2.isContourConvex(cnt)

在輸入影像上繪製輪廓。

cv2.drawContours(img, [cnt], -1, (0,255,255), 3)

列印影像中物體輪廓的凸性。

print("Convexity:", k)

讓我們通過幾個示例來更好地理解。

示例 1

在下面的 Python 示例中,我們檢查矩形的輪廓是否為凸的。

import cv2 import numpy as np img1 = np.zeros((350,630,3), dtype=np.uint8) img = img1[100:250, 200:380, :]=255 img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(img,150,255,0) contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) print("Number of contours:", len(contours)) cnt= contours[0] k = cv2.isContourConvex(cnt) print("Convexity:", k) x, y = cnt[0][0] cv2.drawContours(img1, [cnt], -1, (0,255,255), 3) cv2.putText(img1, f'Convexity:{k}', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2) cv2.imshow("Polylines", img1) cv2.waitKey(0) cv2.destroyAllWindows()

輸出

執行後,它將在控制檯上生成以下輸出:

Number of contours: 1 
Convexity: True

並且我們會看到這個視窗,顯示輸出:

示例 2

在這個 Python 程式中,我們檢查影像中星形物體的輪廓的凸性。

import cv2 import numpy as np img1 = cv2.imread('star.png') img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(img,0,255,0) contours,hierarchy = cv2.findContours(thresh, 1, 2) print("Number of contours:", len(contours)) cnt= contours[0] k = cv2.isContourConvex(cnt) print("Convexity:", k) x, y = cnt[0][0] cv2.drawContours(img1, [cnt], -1, (0,255,255), 3) cv2.putText(img1, f'Convexity:{k}', (x, y+30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2) cv2.imshow("Image", img1) cv2.waitKey(0) cv2.destroyAllWindows()

我們將在本程式的輸入檔案中使用以下影像。

輸出

執行後,它將在控制檯上生成以下輸出:

Number of contours: 1 
Convexity: False

並且我們會看到這個視窗,顯示輸出:

更新於: 2022-09-28

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.