2 回答

TA貢獻1772條經驗 獲得超8個贊
要提取的輪廓應為白色,背景為黑色。我對您的代碼進行了一些修改,消除了未添加任何值的行。
import cv2
img = cv2.imread('image_to_be_read',0)
backup = img.copy() #taking backup of the input image
backup = 255-backup #colour inversion
我使用RETR_TREE作為輪廓檢索模式,該模式檢索所有輪廓并創建完整的族層次列表。請在這里找到相同的文檔
_, contours, _ = cv2.findContours(backup, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
在opencv4中,finContours方法已更改。請用:
contours, _ = cv2.findContours(backup, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
然后遍歷輪廓并在輪廓周圍繪制矩形
for i, contour in enumerate(contours):
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 1)
保存圖像
cv2.imwrite('output3.png', img)
我得到的結果看起來像這樣-

TA貢獻2003條經驗 獲得超2個贊
您使用了標志RETR_EXTERNAL,這意味著它僅在尋找對象的最外輪廓,而不在尋找孔。在您的情況下,發現白色物體覆蓋了整個圖像,幾乎沒有孔(字母/數字)。您有兩種選擇:
用“ bitwise_not”反轉圖像中的顏色
使用RETR_LIST標志收集所有輪廓。請注意,它還會在手指內收集孔。
添加回答
舉報