

画像検出のプログラムで輪郭を抽出したく、参考書をもとにかいているのですが

[code]

    ValueError: not enough values to unpack (expected 3, got 2)
    
[/code]

というエラーが出てしまいわかりません。変数と要素の数が一致しないというものらしいのですが、いろいろ試してみたものの解決できませんでした。教えてくださる方がいらっしゃいましたら教えてください。

[code]

    # 輪郭を抽出
    import cv2
    import matplotlib.pyplot as plt
    
    img_bgr=cv2.imread('earth15_02.jpg')
    img_gray=cv2.cvtColor(img_bgr,cv2.COLOR_BGR2GRAY)
    retval,thresh=cv2.threshold(img_gray,88,255,0)
    img,contours,hierarchy=cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    
    result_img=cv2.drawContours(img,contours,-1,(0,0,255),3)
    
    #
    plt.imshow(result_img);
    plt.show()
    
[/code]


CC BY-SA 4.0
2020-06-24T08:18:24.603
67951
2020-06-24T09:12:57.920
2020-06-24T08:28:14.257
3060
40799
question
python
pythonで ValueError: not enough values to unpack というエラーが出てしまう


これらの記事が当てはまるでしょう。  
[pythonで発生したValueError: not enough values to
unpackの解決](https://teratail.com/questions/194500)  
[[OpenCV] ValueError: not enough values to unpack (expected 3, got
2)](https://qiita.com/rareshana/items/6a2f5e7396f28f6eee49)

2つ目の記事に沿って`img,contours,hierarchy=cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)`の先頭の`img`を削除すればその行は動作しますが、質問記事のソースでは直後に`img`をパラメータとして使っているので、またそこでエラーになります。

Python, OpenCV, matplotlib
の各版数を参考書で使っているものに合わせるか、新しい版数の仕様に合わせて参考書のソースを書き換える必要があるでしょう。

ちなみにこの記事あたりが新しい版数に対応していそうです。  
参考書の内容と細かく対比できるとも限りませんが、何かの足しに。  
[OpenCVで画像から輪郭検出の基本（findContours関数あたり）](https://kitakantech.com/opencv-
findcontours/)


CC BY-SA 4.0
2020-06-24T09:04:07.990
67954
2020-06-24T09:12:57.920
2020-06-24T09:12:57.920
26370
26370
67951
answer