一、問題如下:
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 |