首页 > 解决方案 > 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 总是被声明(或应该被声明)。当评论该行程序运行良好时,当然没有做它应该做的事情。

有任何想法吗?

谢谢!

标签: pythoncv2

解决方案


在 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

推荐阅读