You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:25:20