如何在Python OpenCV中实现多次鼠标点击检测(获取p1与p2)
实现两次鼠标点击获取坐标p1和p2
要在原有OpenCV鼠标点击逻辑基础上,实现连续两次左键点击获取p1和p2,核心是用一个容器记录点击次数与对应坐标,在鼠标回调函数中判断点击状态,完成两次点击后即可提取两个坐标。以下是完整实现代码:
import cv2 # 存储两次点击的坐标容器 clicked_points = [] def mouse_callback(event, x, y, flags, param): # 检测鼠标左键点击事件 if event == cv2.EVENT_LBUTTONDOWN: clicked_points.append((x, y)) print(f"当前点击坐标: ({x}, {y})") # 收集到两个点时,提取p1、p2并执行后续操作 if len(clicked_points) == 2: p1, p2 = clicked_points print(f"已获取两组坐标:p1={p1}, p2={p2}") # 示例:在图像上用绿色线条连接两个点 cv2.line(img, p1, p2, (0, 255, 0), 2) cv2.imshow('image', img) # 清空容器,支持重复选择多组坐标(可选操作) clicked_points.clear() # 读取目标图像(替换为你的图像路径) img = cv2.imread('your_image.jpg') cv2.imshow('image', img) # 绑定鼠标回调函数到当前窗口 cv2.setMouseCallback('image', mouse_callback) # 等待按键后退出程序 cv2.waitKey(0) cv2.destroyAllWindows()
关键逻辑说明:
- 用
clicked_points列表存储每次左键点击的坐标,每次点击自动追加新坐标。 - 当列表长度达到2时,自动拆分得到
p1和p2,此时可插入你需要的业务逻辑(比如计算两点距离、绘制矩形等)。 - 可选:处理完两组坐标后清空列表,支持重复选择多组点对。
如果你的原有代码是基于单窗口的,只需替换回调函数并添加全局坐标存储变量即可,无需大幅改动原有结构。
内容的提问来源于stack exchange,提问作者Kamijou
相关产品推荐
相关产品推荐

