真好用!一招轻松获取图片中鼠标点击处坐标

大家好,今天给大家分享,一个非常实用的技巧。通过鼠标点击获取图像的坐标值,当然也可以进一步通过坐标获取 RGB 值。

用途:

1、可用于获取 mask 区域的坐标

2、获取关键点、线坐标,便于制图等

目标:

假设目前我们的任务是希望获取车辆进入减速带时的速度,那么首先需要做的第一件事就是获取减速带的区域坐标。


思路

官方文章:https://docs.opencv.org/master/db/d5b/tutorial_py_mouse_handling.html

通过创建一个鼠标回调函数,当鼠标事件发生时执行该函数。鼠标事件可以是任何与鼠标相关的事件,如左键向下、左键向上、左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。

官方给了一些demo,用于绘制圆和矩形。

这里我们参考demo,做一定的修改,绘制点,并返回坐标即可。

代码实现

这里可以通过修改,读入图片的路径,切换到大家所需要处理的图片。

1、通过鼠标坐标的点击,即可获取坐标值

2、图片上会显示一个小点、坐标值,并在终端中显示坐标值

# coding: utf-8
import cv2
import numpy as np


img = cv2.imread("test.jpg")


def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        xy = "%d,%d" % (x, y)
        print (xy)
        cv2.circle(img, (x, y), 1, (255, 0, 0), thickness = -1)
        cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
                    1.0, (0,0,0), thickness = 1)
        cv2.imshow("image", img)


cv2.namedWindow("image")
cv2.setMouseCallback("image", on_EVENT_LBUTTONDOWN)
cv2.imshow("image", img)


while(True):
    try:
        cv2.waitKey(100)
    except Exception:
        cv2.destroyWindow("image")
        break
        
cv2.waitKey(0)
cv2.destroyAllWindow()

结果:

原文链接:,转发请注明来源!