在执行以下代码时,我得到这个“ TypeError:img不是数字元组”
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)
我得到的错误是:
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
我做的一切正确,我没有更改任何代码,在单独的程序中执行时,它没有显示任何错误,但是在我的代码中运行时,它显示了错误。我复制的代码来自此链接
-
您在复制时更改了代码。显然,
cam.read()
返回一个元组。从文档中:Python: cv2.VideoCapture.read([image]) → retval, image
您正在返回的整个元组
retval
和image
,而例如只返回它的第二部分(图像)。因此image
,第9行中的变量包含返回的完整元组,read()
而该示例仅返回其第二部分。imwrite
然后失败,因为它不希望将元组作为参数。尝试像这样更改代码:
def get_image(): _, cap = cam.read() return cap
或者,甚至更好
def get_image(): return cam.read()[1]
此外,
ramp_frames
如ram_frames
第2行所述,您对该变量进行了拼写错误。