Python 执行下面的代码i';我得到这个';类型错误:img不是数字元组';
我得到的错误是:Python 执行下面的代码i';我得到这个';类型错误:img不是数字元组';,python,python-2.7,opencv,image-processing,Python,Python 2.7,Opencv,Image Processing,我得到的错误是: import cv2 ram_frames=30 cam = cv2.VideoCapture(0) def get_image(): cap = cam.read() return cap for i in xrange(ramp_frames): temp = get_image() image = get_image() cv2.imwrite('b
import cv2
ram_frames=30
cam = cv2.VideoCapture(0)
def get_image():
cap = cam.read()
return cap
for i in xrange(ramp_frames):
temp = get_image()
image = get_image()
cv2.imwrite('bin/color.jpg',image)
我做的一切都是对的,我没有修改任何代码,当在一个单独的程序中执行时,它不会显示任何错误,但当在我的代码中运行时,它会显示错误。我复制的代码来自您在复制时更改了代码。显然,
cam.read()
返回一个元组。从文件中:
File "C:\modules\imlib.py", line 1035, in __init__
self.imin = self.WinWebCam()
File "C:\modules\imlib.py", line 1125, in WinWebCam
cv2.imwrite('bin/color.jpg',image)
TypeError: img is not a numerical tuple
您将返回retval
和image
的整个元组,而示例仅返回其第二部分(图像)。因此,第9行中的image
变量包含由read()
返回的完整元组,而示例仅返回其第二部分imwrite
然后失败,因为它不希望将元组作为参数
尝试如下更改代码:
Python: cv2.VideoCapture.read([image]) → retval, image
或者,甚至更好
def get_image():
_, cap = cam.read()
return cap
此外,第2行中的变量ramp\u frames
拼写错误为ram\u frames
。如果有np.any(初始值==None):
#你的代码
这肯定对你有用。此代码中的错误,因为initial被视为numpy数组
在我的程序中,我用None初始化了initial,虽然您的修复应该可以,但您的解释不正确。错误状态:img不是数字元组。图像应该是一个数字元组,他的输入不是,因为它是一个布尔值。cam.read()返回一个表示成功的布尔值和一个图像(预期的数字元组)。不,他将元组输入到
imwrite
,这就是问题所在。该错误表示参数的类型不正确(TypeError
)。这是什么类型的错误?如果他把一个元组放进去,为什么错误消息会说img不是一个元组呢?试着运行以下代码:def VideoCapture(n):返回True,“IMGObjectSubstitute”;def get_image():cap=VideoCapture(0);回流盖;打印get_image()
(很抱歉,代码示例在注释中无法正常工作)。我的python知识有限。我认为它的工作原理与Lua相同。图像实际上是一个数字元组,至少在大多数情况下是这样。所以这是有道理的:)我不知道元组在python中实际上是一个特殊的东西。你甚至没有在第2行找到你的打字错误。在这里发布之前,请仔细阅读您的代码。你可以很容易地自己发现这个错误。现在你不会有那种对学习如此重要的成功感。你放弃了这个机会,因为你很懒:)
def get_image():
return cam.read()[1]