不规则错误 - python cv2.imshow NameError:name" definition"没有定义

时间:2016-08-10 19:57:27

标签: python opencv nameerror imshow

我正在通过cv2.imshow运营商投放视频。大多数情况下,代码在命令行中调用时会运行,但偶尔会出现以下NameError:

NameError: name 'masked' is not defined

然而,'蒙面'在cv2.imshow中调用之前是绝对定义的:

image = frame.array

miniframe = image

masked = cv2.bitwise_and(image, image, mask=circle_img)

cv2.imshow("frame", masked)

同样的事情发生在被掩盖的情况下'以这种方式定义:

image = frame.array

miniframe = image

M = np.float32([[1,0,x+w/2],[0,1,y+h/2]])
masked  = cv2.warpAffine(image, M, (x+w, y+h))

cv2.imshow("frame", masked)

print masked行上方插入cv2.imshow时,会导致数组打印为数字 - 代码工作时。当它不起作用时,会导致NameError回溯指向print masked

要明确的是,在任何一种情况下,NameError似乎都是随机发生的,不需要修改代码。所以,我可以运行一次或者20次就好了,但是它会突然在命令行中无效,并追溯到cv2.imshow行。有时,从先前版本复制粘贴相同的代码块将使其再次起作用,但经过一些未经修改的尝试后,返回NameError

我已阅读Python NameError when var IS most definitely defined,并使用cat -A filename.py检查不可见的控制字符。在取消缩进和重新缩进之后,它再工作2次,然后再回到NameError。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

找到了解决方案。我的问题与“蒙面”中没有实现的情况有关。这是一个依赖于人脸检测的程序,但我的问题对于任何必须满足的随机,持续的情况都是一样的。

包括的故障排除步骤: - 审查我的追溯 - 通过在开始时在相机前面有一张脸来测试IRL,然后在开始时将相机移到相机上。这证实如果在开始时检测到面部,程序将运行,但如果没有面部则不会。

要解决此问题,我对cv2.imshow("frame", masked)使用了try / except条件,导致代码如下:

image = frame.array

miniframe = image

M = np.float32([[1,0,x+w/2],[0,1,y+h/2]])
masked  = cv2.warpAffine(image, M, (x+w, y+h))

try:
    cv2.imshow("frame", masked)
except NameError:
    cv2.imshow("frame", image)

我是初学者,这真的教会了我测试和回顾追溯的价值!