Python 基于鼠标点击的全局变量

Python Global Variable based on mouseClick

我正在尝试使用 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循环中执行打印语句时,我得到一个错误说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

...

(其余代码不变,省略)