疑问:OpenCV回调函数clickPosition如何获知x、y为图像点击坐标?
关于OpenCV鼠标回调函数获取坐标的解释
这是OpenCV底层事件机制自动完成的参数传递,具体逻辑如下:
- 当你调用
cv2.setMouseCallback("Output", clickPosition)时,相当于把clickPosition函数注册为窗口"Output"的鼠标事件处理器。 - 每当窗口内触发鼠标事件(比如你代码里监听的左键点击
cv2.EVENT_LBUTTONDOWN),OpenCV的内部事件循环会自动捕获该事件的全部细节:包括事件类型、点击的精确坐标(x,y)、鼠标/键盘按键状态(flags)、以及注册回调时可选传入的额外参数(param)。 - OpenCV会严格遵循它规定的鼠标回调函数签名(
event, x, y, flags, param的固定顺序),把捕获到的这些值自动传入你定义的clickPosition函数。 - 你写的
clickPosition函数完全符合这个签名要求,所以直接就能通过x、y参数拿到当前点击的图像坐标。
简单来说:参数传递是OpenCV内部帮你做的,你只需要按照它规定的函数格式写回调,就能直接使用这些参数。
# 你的代码示例(方便对照) import cv2 img = cv2.imread("image/tree.jpg") def clickPosition(event,x,y,flags,param): if event == cv2.EVENT_LBUTTONDOWN: text = str(x)+","+str(y) cv2.putText(img,text,(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),cv2.LINE_4) cv2.imshow("Output",img) cv2.imshow("Output",img) cv2.setMouseCallback("Output",clickPosition) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Jittabun chantamul
相关产品推荐
相关产品推荐

