opencv 不规则错误- python cv2.imshow NameError:未定义名称“definition”

w9apscun  于 2023-05-23  发布在  Python
关注(0)|答案(2)|浏览(231)

我正在通过cv2.imshow操作员运行视频馈送。大多数情况下,当我在命令行中调用它时,代码会运行,但偶尔我会得到以下NameError:

NameError: name 'masked' is not defined

但是,在cv2.imshow中调用之前,'masked'是绝对定义的:

image = frame.array

miniframe = image

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

cv2.imshow("frame", masked)

当'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。
任何帮助将不胜感激!

mzaanser

mzaanser1#

找到了解决方案。我的问题与“masked”中未满足的条件有关。这是一个依赖于人脸检测的程序,但我的问题对于任何随机的、必须满足的持续条件都是一样的。
故障排除步骤包括:- 审查我的tracebacks -测试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)

我是一个排名初学者,这真的教会了我测试和审查回溯的价值!

3pvhb19x

3pvhb19x2#

请导入谷歌补丁,代码是-

from google.colab.patches import cv2_imshow

完整的导入行应该是
import cv2 import numpy as np import matplotlib.pyplot as plt
从google.colab.patches导入cv2_imshow

相关问题