web-dev-qa-db-ja.com

OpenCV Contours-解凍するには2つ以上の値が必要です

次のコードを使用して輪郭を実装しようとしています。

im = cv2.imread('C:\Users\Prashant\Desktop\T.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img = cv2.drawContour(im, contours, -1, (0,255,0), 3)
cv2.imshow('Image1',img)

しかし、次のエラーが継続的に発生します。

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
    execfile(filename, namespace)
  File "C:/Users/Prashant/.spyder2/.temp.py", line 17, in <module>
    image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: need more than 2 values to unpack

関数findContoursにはさらに引数が必要ですか?修正するにはどうすればよいですか?.

18

OpenCV 2では、 findContours は2つの値contourshierarchyのみを返します。このエラーは、pythonがこれらの2つの値を、このステートメントの左側にある3つの名前に割り当てようとしたときに発生します。

image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
34

これで3つの値が返されます。

findContours(image, mode, method[, contours[, hierarchy[, offset]]])

画像、等高線、階層を返す

3
Yiming Zhou

findContoursopencvの3つの値の画像、等高線、および階層のみを返します

image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
3
rohan goli

2019年現在、OpenCVの3つのバージョン(OpenCV2、OpenCV3、およびOpenCV4)があります。

OpenCV4とOpenCV2の動作は似ています(cv2.findContoursから2つの値を返す)。一方、OpenCV3は3つの値を返します。

if cv2.getVersionMajor() in [2, 4]:
    # OpenCV 2, OpenCV 4 case
    contour, hier = cv2.findContours(
                    thresh.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
else:
    # OpenCV 3 case
    image, contour, hier = cv2.findContours(
                    thresh.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
1
Vishal

これは役立つはずです:

image, contours, hierarchy = cv2.findContours(thresh.copy(),
                                              cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
1
Pinaki Saha

-findContoursは2つの値のみを返します。だからちょうど使用し、

だから中古

コンター、hierarchy = cv2.findContours(thresh、cv2.RETR_TREE、cv2.CHAIN_APPROX_SIMPLE)

1
sharat kanthi

OpenCVのバージョンに応じて、cv2.findContours()にはさまざまな戻り署名があります。 OpenCV 3.4.Xでは、 cv2.findContours() は3つの項目を返します。 OpenCV 2.Xおよび4.1.Xでは、 cv2.findContours() は2つの項目を返します

次のようなバージョンに関係なく、コンターを簡単に取得できます。

cnts = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
0
nathancy

Pythonバージョン2.7.14(v2.7.14:84471935ed、2017年9月16日20:25:58)[MSC v.1500 64ビット(AMD64)]

NumPyバージョン:1.16.1

argparseバージョン:1.1

CV2バージョン:4.0.0

Traceback (most recent call last):

  File "omr.py", line 254, in <module>

    main()

  File "omr.py", line 237, in main

    answers, im = get_answers(args.input)

  File "omr.py", line 188, in get_answers

    contours = get_contours(im)

  File "omr.py", line 26, in get_contours

    im2, contours, hierarchy =cv2.findContours(image_gray,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

ValueError: need more than 2 values to unpack

これは、26行目から「im2」を削除することで解決されます。OpenCvバージョン3.0以降と同様に、関数「findContours」は2つの値のみを返すため、ステートメントは次のようになります。

contours, hierarchy =cv2.findContours(image_gray,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

openCvのバージョンをアップグレードする

0
srbh rthr

現在のOpencvバージョンcv2.findContoursによると、2つの値が返されます。輪郭は、同じ色または強度を持つ、(境界に沿った)すべての連続した点を結ぶ曲線として簡単に説明できます。輪郭は、形状分析とオブジェクトの検出と認識に役立つツールです。

0
nikhil rana