python開發(fā):OpenCV版本差異所引發(fā)的cv2.findContours()函數(shù)傳參問題
一、如遇以下問題:
錯誤信息:
ValueError: not enough values to unpack (expected 3, got 2)
值錯誤:沒有足夠的值解包(應(yīng)為3,得到2)
二、解決問題:
1.降級(或升級)OpenCV:
pip3 install opencv-python==3.V
注釋:接收三參數(shù)(image,contours, hierarchy)
pip3 install opencv-python==4.V
注釋:接收兩參數(shù)(contours, hierarchy)
2.版本差異:
OpenCV2和OpenCV4中:
findContours這個輪廓提取函數(shù)會返回兩個值:
1) 輪廓的點集(contours)
2) 各層輪廓的索引(hierarchy)
OpenCV3中:
則會返回三個值:
1) 處理的圖像(image)
2) 輪廓的點集(contours)
3) 各層輪廓的索引(hierarchy)
三、cv2.findContours()相關(guān)參數(shù)
1. 參數(shù):
1)第一個參數(shù):
尋找輪廓的圖像
2)第二個參數(shù)表示輪廓的檢索模式,有四種:
cv2.RETR_EXTERNAL 只檢測外輪廓
cv2.RETR_LIST 檢測的輪廓不建立等級關(guān)系
cv2.RETR_CCOMP 建立兩個等級的輪廓,上面的一層為外邊界,里面的一 層為內(nèi)孔的邊界信息
cv2.RETR_TREE 建立一個等級樹結(jié)構(gòu)的輪廓
3)第三個參數(shù)method為輪廓的近似辦法:
cv2.CHAIN_APPROX_SIMPLE 壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標(biāo)(矩形只需四頂點)
cv2.CHAIN_APPROX_TC89_L1 使用teh-Chinl chain 近似算法
CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法
cv2.CHAIN_APPROX_NONE 存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1