2016-10-27 56 views
2

我最近開始在Python上學習OpenCV。使用cv2.findContours()與Python的錯誤

我指的是this這裏的教程,以獲得一些幫助獲取圖像的輪廓。

我的代碼 -

import cv2 
import numpy as np 

img = cv2.imread('shapes.jpg', 0) 
img = cv2.medianBlur(img, 5) 
thresh =  cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\ 
cv2.THRESH_BINARY,11,2) 

cv2.imshow('Thresh', thresh) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

image, contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

cv2.drawContours(image, countours, -1, (0,255,0), 3) 
cv2.imshow('Contours', img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

第一閾值的圖像時出現的,但在那之後我得到一個錯誤消息

Traceback (most recent call last): 
    File "contours.py", line 21, in <module> 
    image, contours, hierarchy =  cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 
ValueError: need more than 2 values to unpack 

任何幫助解決這一問題將不勝感激。

回答

2

看看this的例子。

cv2.findContours(...) 

只返回兩個對象,您試圖將其解壓爲三個。

把上面一行是:

contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

,它應該工作。

+0

根據Opencv版本,findContours可以有2個或3個返回值... – Mehdi

3

您鏈接的教程是OpenCV version 3cv2.findContours確實返回該版本中的3個對象。

因此,要麼更新opencv,要麼使用@will的解決方案。

+0

沒有意識到這一點。很好的接收。 – will

+0

我意識到這很晚了。 –