2016-10-27 9 views
2

私は最近、PythonでOpenCVを学び始めました。Pythonでcv2.findContours()を使用しているエラー

ここでは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(...) 

は2つのオブジェクトだけを返します。3つにアンパックしようとしています。このためにライン

変更:

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

、それが動作するはずです。

+0

OpenCvのバージョンによって、findContoursは2または3の戻り値を持つことができます。 – Mehdi

3

リンクしたチュートリアルはOpenCV version 3です。 cv2.findContoursはそのバージョンで3つのオブジェクトを返します。

したがって、opencvを更新するか、@willで解決策を使用してください。

+0

これを認識しませんでした。ナイスキャッチ。 – will

+0

私はこれをかなり遅く実現しました。 –

関連する問題