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

问题描述 投票:0回答:2

我正在通过

cv2.imshow
操作员运行视频源。大多数时候,当我在命令行中调用代码时,代码会运行,但偶尔会出现以下 NameError:

NameError: name 'masked' is not defined

但是,'masked' 在 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 traceback 指向
print masked
.

要明确的是,在任何一种情况下,NameError 似乎都是随机发生的,无需修改代码。所以,我可以运行它一次或 20 次就好了,但是它会突然在命令行中不起作用,并回溯到

cv2.imshow
行。有时,复制粘贴以前版本中的相同代码块会使它再次运行,但经过几次未经修改的尝试后,又回到了
NameError

我已经阅读了Python NameError when var IS most defined,并使用

cat -A filename.py
检查不可见的控制字符。在取消和重新缩进之后,它又工作了 2 次,然后又回到了 NameError。

任何帮助将不胜感激!

python opencv nameerror imshow
2个回答
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)

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


0
投票

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

from google.colab.patches import cv2_imshow

完整的导入行应该是

导入cv2 将 numpy 导入为 np 将 matplotlib.pyplot 导入为 plt

从 google.colab.patches 导入 cv2_imshow

© www.soinside.com 2019 - 2024. All rights reserved.