Python Opencv鼠标回调

使用 OpenCV 的 cv2.setMouseCallback() 方法来捕捉鼠标事件,并实现以下功能:

  1. 实时在鼠标指针附近显示其位置的像素坐标。
  2. 通过左键双击,将像素坐标记录到数组中。
  3. 通过右键点击,取消上一次添加的坐标。

下面是实现代码的示例:

python 复制代码
import cv2
import numpy as np

# 初始化一个数组,用于存储点击的坐标
coords = []

# 鼠标回调函数
def mouse_callback(event, x, y, flags, param):
    global coords

    # 左键双击,记录坐标
    if event == cv2.EVENT_LBUTTONDBLCLK:
        coords.append((x, y))
        print(f"记录坐标: {x}, {y}")
    
    # 右键单击,取消上一次记录的坐标
    elif event == cv2.EVENT_RBUTTONDOWN:
        if coords:
            removed_coord = coords.pop()
            print(f"取消坐标: {removed_coord}")

# 创建窗口并绑定鼠标回调函数
cv2.namedWindow("Image")
cv2.setMouseCallback("Image", mouse_callback)

# 读取图像
img = cv2.imread("your_image.jpg")

while True:
    # 在图像上显示鼠标当前位置
    img_copy = img.copy()
    mouse_x, mouse_y = cv2.getWindowImageRect('Image')[:2]

    # 获取当前鼠标坐标
    cv2.putText(img_copy, f"({mouse_x}, {mouse_y})", (mouse_x + 20, mouse_y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

    # 显示图像
    cv2.imshow("Image", img_copy)

    # 按 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 关闭所有窗口
cv2.destroyAllWindows()

# 输出最终记录的坐标
print("最终记录的坐标: ", coords)

代码说明:

  1. 鼠标回调函数 mouse_callback:

    • 捕捉鼠标的事件,包括左键双击和右键点击。
    • 左键双击事件 cv2.EVENT_LBUTTONDBLCLK 记录当前的鼠标位置。
    • 右键点击事件 cv2.EVENT_RBUTTONDOWN 移除上一次添加的坐标。
  2. cv2.getWindowImageRect():

    • 该函数用于获取窗口图像矩形的尺寸以及鼠标位置。你可以实时显示鼠标坐标。
  3. 实时显示鼠标坐标:

    • 使用 cv2.putText() 在图像上显示鼠标当前位置。
  4. 记录坐标:

    • 双击左键时,鼠标位置将会被添加到 coords 数组中,右键点击则会移除最后一个记录的坐标。
  5. 退出:

    • 按 q 键退出显示循环,并打印最终的坐标。
相关推荐
特立独行的猫A7 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持7 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang8 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰9 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc10 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
羲云网络13 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记16 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事16 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力19 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力19 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python