python - NameError 即使变量被初始化
问题描述
我正在用 Python(第一次计时器)编写代码,试图编写一种人工视觉算法,该算法可以识别电视频道何时正在播放广告或常规电视节目(当广告在电视上播放时没有电视徽标)。
我正在使用的代码是这个
import numpy as np
import cv2
cap = cv2.VideoCapture('Telecinco.mp4')
count = 0
template = cv2.imread('telecinco_logo.png',0)
while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.resize(frame,None,fx=1,fy=1,interpolation = cv2.INTER_CUBIC)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
if count == 0:
count = 1
cv2.imwrite('image.png', frame)
w, h = template.shape[::-1]
res = cv2.matchTemplate(gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.7
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
logo_img = frame[pt[1]:pt[1]+h,pt[0]:pt[0]+w]
cv2.rectangle(frame, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 1)
cv2.imshow('Captura',frame)
cv2.imshow('Logo encontrado', logo_img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
但是,python给了我一个错误:
Traceback (most recent call last):
File "logoDeteccion.py", line 27, in <module>
cv2.imshow('Logo encontrado', logo_img)
NameError: name 'logo_img' is not defined
我真的很困惑。logo_img 总是被声明(或应该被声明)。当评论该行程序运行良好时,当然没有做它应该做的事情。
有任何想法吗?
谢谢!
解决方案
在 while 循环中,您尝试logo_img
在屏幕上显示。
如果它不存在,那么您可以等待zip(*loc[::-1])
有一个实际值。
请看下面的代码:
while(cap.isOpened()):
try:
cv2.imshow('Logo encontrado', logo_img)
except NameError:
pass #Go for next loop and check to see if logo_img exists
推荐阅读
- datetime - 修复脚本以输入 2021-02-01 而不是 2021-02-32
- r - R从数据框中的句子中删除单词
- matlab - 在 Matlab 中创建 if else 语句以选择正确的矩阵
- selenium - org.openqa.grid.common.exception.GridException:在请求中找不到功能:{“capabilities”:{“browserName”:“Firefox”}}使用Selenium Grid
- c# - 使用 AddHttpClient 时如何配置其他依赖项
- javascript - 使用授权无法从带有 axios 的 API 获得响应
- c - 矩阵加法程序说明
- .net - vb.net 将数据传递给另一个类
- spring - 如何配置 Spring Boot 以仅接收 NGINX 流量
- arm - 无法建立 LAN 会话和建立 IPMI v1.5 / RMCP 会话