cap = cv2.VideoCapture('video.mp4')
def realTime():
while True:
success, img = cap.read()
img =cv2.resize(img,(0,0),None,0.5,0.5)
ih, iw, channels = img.shape
# Draw the crossing lines
cv2.line(img, (0, middle_line_position), (iw, middle_line_position), (255, 0, 255), 1)
cv2.line(img, (0, up_line_position), (iw, up_line_position), (0, 0, 255), 1)
cv2.line(img, (0, down_line_position), (iw, down_line_position), (0, 0, 255), 1)
# Show the frames
cv2.imshow('Output', img)
if __name__ == '__main__':
realTime()
input_size = 320
blob = cv2.dnn.blobFromImage(img, 1 / 255,(input_size,input_size), [0, 0, 0], 1, crop=False)
所以这是我的代码,它一直在 blob 分配行上抛出错误
NameError: name 'img' is not defined
我尝试更新所有命令和模块,但仍然显示此错误,现在我找不到解决方案
你的错误信息 “NameError: name 'img' is not defined” 出现的原因是你在
realTime()
函数外使用变量
img
,而它是在
realTime()
函数内部定义的。因此,在
realTime()
函数外部,
img
是不可见的。
为了解决这个问题,你需要在
realTime()
函数内部处理
img
变量,或者将
img
变量定义为全局变量。
方法一:在
realTime()
函数内部处理
img
将使用
img
的代码移到
realTime()
函数内部,例如:
cap = cv2.VideoCapture('video.mp4')
input_size = 320
def realTime():
while True:
success, img = cap.read()
img =cv2.resize(img,(0,0),None,0.5,0.5)
ih, iw, channels = img.shape
# Draw the crossing lines
cv2.line(img, (0, middle_line_position), (iw, middle_line_position), (255, 0, 255), 1)
cv2.line(img, (0, up_line_position), (iw, up_line_position), (0, 0, 255), 1)
cv2.line(img, (0, down_line_position), (iw, down_line_position), (0, 0, 255), 1)
# 在这里使用 img 变量
blob = cv2.dnn.blobFromImage(img, 1 / 255,(input_size,input_size), [0, 0, 0], 1, crop=False)
# ... 其他使用 img 的代码
# Show the frames
cv2.imshow('Output', img)
if __name__ == '__main__':
realTime()
方法二:将
img
定义为全局变量
在函数外部定义
img
,并在函数内部使用
global img
声明:
img = None
cap = cv2.VideoCapture('video.mp4')
input_size = 320
def realTime():
global img
while True:
success, img = cap.read()
# ... 其他代码
cv2.imshow('Output', img)
if __name__ == '__main__':
realTime()
blob = cv2.dnn.blobFromImage(img, 1 / 255,(input_size,input_size), [0, 0, 0], 1, crop=False)
# ... 其他使用 img 的代码
建议
尽量避免使用全局变量,因为它可能会导致代码难以理解和维护。如果可以,尽量将
img
变量的处理逻辑封装在函数内部,并通过函数参数传递。