OpenCV 檢測矩形
Ammar Ali
2024年2月15日
本教程將討論在 Python 中使用 OpenCV 的 findContours()
和 contourArea()
函式檢測矩形。
在 Python 中使用 OpenCV 的 findContours()
和 contourArea()
函式檢測影象中的矩形
我們可以使用 OpenCV 的 findContours()
函式檢測影象中存在的矩形,我們可以使用 contourArea()
函式根據其面積對不同的矩形進行排序。
我們可以使用 OpenCV 的 findContours()
函式找到給定影象的輪廓,但我們必須在 findContours()
函式中使用二進位制或黑白影象。
要將給定的影象轉換為二進位制,我們必須使用 OpenCV 的 cvtColor()
和 threshold()
函式。cvtColor()
函式用於將一種顏色空間轉換為另一種顏色空間,我們將使用它來將 BGR 影象轉換為灰度。
threshold()
函式將灰度影象轉換為只有兩個值的二進位制影象,0 和 255。請參見下面的程式碼。
import cv2
import numpy as np
img = cv2.imread("rectangle.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for cnt in cnts:
approx = cv2.contourArea(cnt)
print(approx)
cv2.imshow("image", img)
cv2.imshow("Binary", thresh_img)
cv2.waitKey()
輸出:
45000.0
23000.0
40000.0
如輸出所示,每個矩形的面積都顯示出來了,而且所有的面積都不一樣。使用這些區域,我們可以對矩形進行排序,就像我們可以給它們不同的顏色或將每個矩形儲存到不同的影象檔案中或在它們上放置一些文字等。
二進位制影象中的形狀應為白色,背景應為黑色。
如圖所示,輸出影象中形狀的顏色與原始影象中形狀的顏色不同。findContours()
函式的第一個引數是二值影象,第二個引數是輪廓檢索方法。
我們使用 cv2.RETR_EXTERNAL
,因為我們只需要外部輪廓。第三個引數是用於查詢輪廓的近似方法。
作者: Ammar Ali