亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OpenCV findContours()僅返回一個外部輪廓

OpenCV findContours()僅返回一個外部輪廓

慕斯709654 2021-05-05 09:33:13
我試圖隔離驗證碼中的字母,我設法過濾了驗證碼,結果得到了這個黑白圖像:但是,當我嘗試使用OpenCV的findContours方法分離字母時,它只是發現了一個包裹我整個圖像的外部輪廓,從而產生了該圖像(外部黑色輪廓)。我將此代碼與Python 3和OpenCV 3.4.2.17結合使用:img = threshold_image(img)cv2.imwrite("images/threshold.png", img)image, contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for i, contour in enumerate(contours):    area = cv2.contourArea(contour)    cv2.drawContours(img, contours, i, (0, 0, 0), 3)cv2.imwrite('images/output3.png', img)我只希望最終結果是每個字符外5個輪廓。
查看完整描述

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)

我得到的結果看起來像這樣-

http://img1.sycdn.imooc.com//609a3ebf0001997001910045.jpg

查看完整回答
反對 回復 2021-05-11
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

您使用了標志RETR_EXTERNAL,這意味著它僅在尋找對象的最外輪廓,而不在尋找孔。在您的情況下,發現白色物體覆蓋了整個圖像,幾乎沒有孔(字母/數字)。您有兩種選擇:

  1. 用“ bitwise_not”反轉圖像中的顏色

  2. 使用RETR_LIST標志收集所有輪廓。請注意,它還會在手指內收集孔。


查看完整回答
反對 回復 2021-05-11
  • 2 回答
  • 0 關注
  • 512 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號