我正在通过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。
非常感谢任何帮助!
答案 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)
我是初学者,这真的教会了我测试和回顾追溯的价值!