基于mouseClick的Python全局变量



我正试图使用OpenCV鼠标事件回调来定义ROI,但下面的代码无法识别mouseClick函数中定义的全局变量。

import cv2
def mouseClick(event,xPos,yPos,flags,params):
global pnt1
global pnt2
global evt
pnt1 = (xPos,yPos)
pnt2 = (xPos,yPos)
evt = event


cam=cv2.VideoCapture(0, cv2.CAP_DSHOW)

cv2.namedWindow("My WebCam")
cv2.setMouseCallback("My WebCam",mouseClick)

while True:
ignore, frame = cam.read()
cv2.imshow("My WebCam",frame)

print(pnt1,pnt2,evt)
if cv2.waitKey(1) == ord('q'):
break
cam.release()

当我运行这个程序时,我得到一个错误,说在while循环中执行print语句时没有定义pnt1。关于我做错了什么,有什么建议吗?感谢您的帮助并花时间阅读此问题。

print(pnt1,pnt2,evt)
NameError: name 'pnt1' is not defined

您需要在mouseClick()函数之外分配pnt1pnt2evt。鼠标回调可能不一定在程序到达print()语句之前运行——如果是这种情况,那么这些变量将是未定义的。

import cv2
pnt1 = None
pnt2 = None
evt = None
def mouseClick(event,xPos,yPos,flags,params):
global pnt1
global pnt2
global evt
pnt1 = (xPos,yPos)
pnt2 = (xPos,yPos)
evt = event
...

(代码的其余部分不变,为简洁起见省略(

最新更新