エラー「ValueError: 解凍するのに十分な値がありません (3 が期待され、2 が取得されました)」を解決します。
エラーメッセージ:
Traceback (most recent call last):
File "E:/workspace/code/detect/ShapeDetect.py", line 86, in <module>
ld.analysis(src)
File "E:/workspace/code/detect/ShapeDetect.py", line 18, in analysis
out_binary, contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) #
ValueError: not enough values to unpack (expected 3, got 2)
进程已结束,退出代码为 1
opencvを使用してキーポイント認識やエッジ輪郭抽出を行うと上記のエラーが表示されますが、その原因は関数で定義した戻り値の数と、関数呼び出し時に実際に割り当てられる戻り値の数が一致していないためです。この問題は、実際には、opencv バージョンの不一致によって引き起こされます。opencv の新しいバージョン (opencv4) では、findContours を呼び出すときに 2 つのパラメータだけが必要です。最初のパラメータ (この記事の間違ったコード行の out_binary) を削除する必要があります。問題を完全に解決するには、1 つのパラメータを削除するだけで済みます。opencv3 には 3 つのパラメータが必要で、動作環境を変更し、opencv3.6 を使用することでも解決できます。
解決
方法1
最初のパラメータを削除します。つまり、コードは次のように変更されます:
contours,hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
方法 2
opencv バージョンを opencv3 まで変更します。