import cv2
# 创建一个空列表,用于存储坐标信息
coordinates = []
cap = cv2.VideoCapture(0)
# 定义一个全局变量来标记是否应该绘制点(用于处理首次点击前的状态)
should_draw = False
# 定义鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
global should_draw
if event == cv2.EVENT_LBUTTONDOWN:
print(f'({x}, {y})') # 打印点击位置的坐标
coordinates.append((x, y)) # 将坐标信息存储到列表中
should_draw = True # 标记应该开始绘制点
cv2.namedWindow('Point Coordinates')
cv2.setMouseCallback('Point Coordinates', mouse_callback)
while True:
ret, frame = cap.read()
if not ret:
break # 确保视频帧正确读取
# 创建一个副本用于绘制(避免直接修改原始帧)
draw_frame = frame.copy()
# 如果有点击发生,则在最新帧上绘制点
if should_draw and coordinates:
for (x, y) in coordinates:
# print(len(coordinates))
# 在图像的副本上绘制一个填充的红色圆点
cv2.circle(draw_frame, (x, y), 3, (0, 0, 255), -1)
# 在图像副本上添加坐标文本(注意调整文本位置以避免重叠)
cv2.putText(draw_frame, f'({x},{y})', (x + 5, y - 5),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
if (len(coordinates)>=5):
coordinates = []
break
# 显示绘制后的图像副本
cv2.imshow('Point Coordinates', draw_frame)
k = cv2.waitKey(1) & 0xFF
if k == 13: # 如果按下回车Enter键,退出显示
break
cv2.destroyAllWindows()
cap.release() # 释放摄像头资源
# 打印存储的坐标信息列表
print("所有点击的坐标信息:", coordinates)
opencv实现实时画面显示坐标(python)
最新推荐文章于 2024-12-07 18:06:17 发布