一、响应鼠标事件
使用OpenCV读取图像,可以在读取图像的窗口通过鼠标点击可以实现:获取鼠标点击像素点的坐标。
cv2.setMouseCallback(winname, callback, userdata)
其中:
winname:窗口的名字
callback:回调函数
userdata:给回调函数的参数
#鼠标回调函数,传入到callback参数上去
def mouse_callback(event, x, y, flags, userdata)
enent:鼠标事件
x:横坐标
y:纵坐标
flags:事件组合
userdata:与cv2.setMouseCallback中的userdata对应,用于传参
二、鼠标事件
鼠标事件event 对应
EVENT_MOUSEMOVE 鼠标移动
EVENT_LBUTTONDOWN 按下鼠标左键
EVENT_RBUTTONDOWN 按下鼠标右键
EVENT_LBUTTONUP 左键释放
EVENT_RBUTTONUP 右键释放
EVENT_LBUTTONDBLCLK 左键双击
EVENT_RBUTTONDBLCLK 右键双击
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
三、获取鼠标点击坐标代码
代码如下:
import cv2
# 创建一个空列表,用于存储坐标信息
coordinates = []
#定义鼠标回调函数:
def mouse_callback(event, x, y, flags, userdata):
if event == cv2.EVENT_LBUTTONDOWN:
print(f'({x}, {y})') # 打印点击位置的坐标
# 在图像上绘制一个填充的红色圆点
cv2.circle(img, (x, y), 3, (0, 0, 255), -1)
# 在图像上添加坐标文本
cv2.putText(img, f'({x},{y})', (x, y),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
# 将坐标信息存储到列表中
coordinates.append((x, y))
'''
mouse_callback 函数被设置为鼠标事件的回调函数。
当鼠标左键按下时 (cv2.EVENT_LBUTTONDOWN),
它会打印出点击位置的坐标 (x, y),在该位置绘制一个填充的红色圆点,
并在圆点附近添加坐标文本。
'''
img = cv2.imread('lena.png')
cv2.namedWindow('Point Coordinates')
cv2.setMouseCallback('Point Coordinates', mouse_callback)
'''
创建一个名为 'Point Coordinates' 的窗口,用于显示图像。
将鼠标回调函数 mouse_callback 绑定到这个窗口上,以便处理鼠标事件
'''
while True:
cv2.imshow('Point Coordinates', img)
k = cv2.waitKey(1) & 0xFF
if k == 13: # 如果按下回车Enter键,退出显示
break
cv2.destroyAllWindows()
# 打印存储的坐标信息列表
print("所有点击的坐标信息:", coordinates)
结果显示
点击过后:
输出:
参考链接:https://blog.csdn.net/qq_38473254/article/details/134082649