小编典典

在执行以下代码时,我得到这个“ TypeError:img不是数字元组”

python

    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

我做的一切正确,我没有更改任何代码,在单独的程序中执行时,它没有显示任何错误,但是在我的代码中运行时,它显示了错误。我复制的代码来自此链接


阅读 219

收藏
2020-12-20

共1个答案

小编典典

您在复制时更改了代码。显然,cam.read()返回一个元组。从文档中:

Python: cv2.VideoCapture.read([image]) → retval, image

您正在返回的整个元组retvalimage,而例如只返回它的第二部分(图像)。因此image,第9行中的变量包含返回的完整元组,read()而该示例仅返回其第二部分。imwrite然后失败,因为它不希望将元组作为参数。

尝试像这样更改代码:

def get_image():
      _, cap = cam.read()
      return cap

或者,甚至更好

def get_image():
    return cam.read()[1]

此外,ramp_framesram_frames第2行所述,您对该变量进行了拼写错误。

2020-12-20