Python開發:OpenCV版本差異所引發的cv2.findContours()函數傳參問題


一、問題如下:

  cv2.findContours()這個方法是用來找出輪廓值的:

# cv2.findContours找出輪廓值,cv2.RETR_EXTERNAL表示圖像的外輪廓
binary, contours, h = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

  但是在運行時,我所使用的opencv-python4.1.0.25則報錯:

  

  錯誤信息:

  ValueError: not enough values to unpack (expected 3, got 2)

  值錯誤:沒有足夠的值解包(應為3,得到2)

二、問題解決:

  1、降級(或升級)OpenCV:

    我在python中安裝的第三方庫是OpenCV4.1.0.25,所以這里要降級處理:

pip3 install opencv-python==3.4.3.18

    使用pip將版本降為3.4.3.18。

    

    

    降級之后,PyCharm中可以看到現在的版本號:

    

    (如果是OpenCV2則要升級到OpenCV3)

   2、解析差異:

    OpenCV2和OpenCV4中:

      findContours這個輪廓提取函數會返回兩個值:

      ①輪廓的點集(contours)

      ②各層輪廓的索引(hierarchy)

    OpenCV3中:

      則會返回三個值:

      ①處理的圖像(image)

      ②輪廓的點集(contours)

      ③各層輪廓的索引(hierarchy)

三、cv2.findContours()相關:

  1、參數:

    ①第一個參數:

尋找輪廓的圖像
 

    ②第二個參數表示輪廓的檢索模式,有四種:

cv2.RETR_EXTERNAL 只檢測外輪廓
cv2.RETR_LIST 檢測的輪廓不建立等級關系
cv2.RETR_CCOMP 建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息
cv2.RETR_TREE 建立一個等級樹結構的輪廓
 

    ③第三個參數method為輪廓的近似辦法:

cv2.CHAIN_APPROX_SIMPLE 壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標(矩形只需四頂點)
cv2.CHAIN_APPROX_TC89_L1 使用teh-Chinl chain 近似算法
CV_CHAIN_APPROX_TC89_KCOS
cv2.CHAIN_APPROX_NONE 存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM