Python 3-ValueError: not enough values to unpack (expected 3, got 2)

Python 3-ValueError: not enough values to unpack (expected 3, got 2)

嗨,我是计算机视觉和 Whosebug 的新手,我在 Windows 上的 python 3 程序有问题,因为 cv2.findContours() 函数 return s 2 而不是文档中的三个值。我为 return 传递了 2 个值来解决这个错误,第一个(图像)的类型是一个列表,第二个(cnts)的类型是一个 int32 但其中的 none 是能够使用的在 cv2.drawContours() 中没有窃听在这里我使用图像作为参数,因为它是唯一的列表 returned 所以我猜它是轮廓列表 cv2.drawContours()。所以这是代码:

#This is the program for a document scanner so as to extract a document
#from any image and apply perspective transform to show it as final result
import numpy as np
import cv2
import imutils
from matplotlib import pyplot as plt
cap=cv2.VideoCapture(0)
ret,img=cap.read()
img1=img.copy()
cv2.imshow('Image',img1)
img1=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
img1=cv2.bilateralFilter(img1,7,17,17)
img1=cv2.Canny(img1,30,200)
image,cnts=cv2.findContours(img1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#cnts=np.asarray(cnts,dtype='uint8')
cnts=np.array(cnts)

cv2.imshow('Edge',img1)
print('cnts var  data type',cnts.dtype)
#print("Hi")

img=cv2.drawContours(img,[image],-1,(255,255,0),3)

这是现在出现的 python 空闲 shell 结果:

cnts var  data type is int32
Traceback (most recent call last):
  File "D:\PyCharm Projects\Test_1_docscanner.py", line 20, in <module>
    img=cv2.drawContours(img,[image],-1,(255,255,0),3)
TypeError: contours is not a numpy array, neither a scalar

我终于让它工作了,我做了以下事情:

  • 首先,我之前搞砸了我的大部分环境变量,没有抑制一些系统变量。所以我在朋友的帮助下尽可能多地检索并删除了我愚蠢无知创建的那些。

  • 其次,我卸载了所有其他 python 版本(至少我尝试过),尽管我似乎仍然看到它们的图标(它们似乎是 "undeletable"),甚至我正在使用的那个(Python3.7.3)。然后我安装 Python 3.7.4.

  • 第三,答案肯定是我在 cv2.drawContours() 函数之前添加了这一行 cnts=imutils.grab_contours(cnts) 。从 Adrian Rosebrock github 的 imutils 包中获取它。我的代码现在可以工作,因为该行有助于解析您正在使用的任何 cv2.drawContours() opencv 版本的轮廓,从而避免源自 cv2.findContours() 函数的版本冲突,该函数在 [=29= 之前使用]()。

    In conclusion I tried imutils.grab_contours() previously to these changes on my python3.7.3 but it did not work. But I believe above all the combination of "cnts=imutils.grab_contours(cnts)" and the update to Python3.7.4,is what solved the issue.

希望对您有所帮助