嗨,我是计算机视觉和stackoverflow的新手,我的Windows 3上的python 3程序有问题,因为cv2.findContours()函数返回2而不是文档中的三个值。我传递了两个返回值来解决该错误,第一个(图像)的类型是一个列表,第二个(cnts)的类型是一个int32,但它们都不能在cv2.drawContours()中使用而不会发生错误这里我使用image作为参数,因为它是返回的唯一列表,所以我猜它是轮廓列表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
答案 0 :(得分:0)
我终于开始工作了,下面我做了:
首先,我以前搞砸了我的大多数环境变量,并没有抑制某些系统变量。因此,我在一个朋友的帮助下,尽可能地检索并删除了我愚蠢无知创建的那些文件。
其次,我卸载了所有其他python版本(至少我尝试过),尽管似乎我仍然看到它们的图标(它们似乎是“不可删除的”),甚至我正在使用的图标也是如此(Python3.7.3) 。然后安装Python 3.7.4。
最后,我之前在python3.7.3上尝试了imutils.grab_contours()来进行这些更改,但没有用。但是,我认为最重要的是,解决方案已将“ cnts = imutils.grab_contours(cnts)”与Python3.7.4的更新结合起来。
希望这会有所帮助