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()
函数之外分配 pnt1
、pnt2
和 evt
。在程序到达 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
...
(其余代码不变,省略)
我正在尝试使用 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()
函数之外分配 pnt1
、pnt2
和 evt
。在程序到达 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
...
(其余代码不变,省略)