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 键退出显示循环,并打印最终的坐标。
相关推荐
Q_Q196328847537 分钟前
python+django/flask基于深度学习的个性化携程美食数据推荐系统
spring boot·python·深度学习·django·flask·node.js·php
胡耀超40 分钟前
通往AGI的模块化路径:一个可能的技术架构(同时解答微调与RAG之争)
人工智能·python·ai·架构·大模型·微调·agi
清空mega1 小时前
从零开始搭建 flask 博客实验(常见疑问)
后端·python·flask
xier_ran1 小时前
关键词解释:DAG 系统(Directed Acyclic Graph,有向无环图)
python·算法
顾安r2 小时前
11.7 脚本网站 中国象棋
python·bash
WenGyyyL2 小时前
微信小程序开发——第二章:微信小程序开发环境搭建
开发语言·python·微信小程序
循环过三天2 小时前
3.2、Python-元组
开发语言·python
Q_Q5110082852 小时前
python+django/flask的篮球馆/足球场地/运动场地预约系统
spring boot·python·django·flask·node.js·php
云雾J视界2 小时前
AI驱动半导体良率提升:基于机器学习的晶圆缺陷分类系统搭建
人工智能·python·机器学习·智能制造·数据驱动·晶圆缺陷分类
朝凡FR2 小时前
AIShareTxt入门:快速准确高效的为金融决策智能体提供股票技术指标上下文
python·ai编程