OpenCV Python – 如何在图像上显示点击点的坐标?

OpenCV Python – 如何在图像上显示点击点的坐标?

OpenCV为我们提供不同类型的鼠标事件,包括左键或右键单击、鼠标移动、左键双击等。鼠标事件返回鼠标事件的坐标(x,y)。为了在事件发生时执行一个操作,我们定义一个鼠标回调函数。我们使用左键单击(cv2.EVENT_LBUTTONDOWN)和右键单击(cv2.EVENT_RBUTTONDOWN)来显示在图像上单击的点的坐标。

步骤

要显示在输入图像上单击点的坐标,可以按照下面的步骤进行-

  • 导入所需库OpenCV。确保您已经安装了它。

  • 定义一个鼠标回调函数来显示在输入图像上单击点的坐标。鼠标回调函数在鼠标事件发生时执行。鼠标事件给出鼠标事件的坐标(x,y)。在此处,我们定义一个鼠标回调函数,在鼠标左键单击(EVENT_LBUTTONDOWN)或右键单击(EVENT_RBUTTONDOWN)时显示在输入图像上单击点的坐标。在这个回调函数中,我们将坐标显示为文本,将点显示为具有小半径的圆。

  • 使用cv2.imread()函数读取输入图像。

  • 定义一个新窗口,并使用cv2.setMouseCallback()函数将上面定义的回调函数绑定到窗口。

  • 显示图像窗口。该窗口在其中打开输入图像,我们在图像上显示鼠标事件发生的点的坐标。要关闭窗口,请按ESC键。

让我们来看一些程序示例,以更好地理解。

输入图像

我们将在下面的示例中使用此图像作为输入文件。

OpenCV Python - 如何在图像上显示点击点的坐标?

示例

在下面的Python代码中,我们在图像上单击左键(EVENT_LBUTTONDOWN)时显示点的坐标,并绘制点。

# 导入所需库
import cv2

# 定义显示图像上各点坐标的函数
def click_event(event, x, y, flags, params):
   if event == cv2.EVENT_LBUTTONDOWN:
      print(f'({x},{y})')

      # 在图像上添加坐标文本
      cv2.putText(img, f'({x},{y})',(x,y),
      cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

      # 在图像上绘制点
      cv2.circle(img, (x,y), 3, (0,255,255), -1)

# 读取输入图像
img = cv2.imread('back2school.jpg')

# 创建窗口
cv2.namedWindow('Point Coordinates')

# 将回调函数绑定到窗口
cv2.setMouseCallback('Point Coordinates', click_event)

# 显示图像
while True:
   cv2.imshow('Point Coordinates',img)
   k = cv2.waitKey(1) & 0xFF
   if k == 27:
      break
cv2.destroyAllWindows()
Python

输出结果

当你执行以上代码时,它会产生以下 输出结果

(77,119)
(327,57)
(117,217)
(351,194)
(509,271)
(264,364)
(443,117)
Python

我们得到下面的窗口展示了 输出结果

OpenCV Python - 如何在图像上显示点击点的坐标?

在以上输出结果的图像中,用黄色绘制点,而坐标文本为红色。

示例

在此示例中,我们在图像上执行左( EVENT_LBUTTONDOWN )或右( EVENT_RBUTTONDOWN )点击时,显示各点的坐标,并在图像上绘制这些点。

# 导入所需的库
import cv2

# 显示在图像上单击的点的坐标的功能
def click_event(event, x, y, flags, params):

   # 检查左键点击
   if event == cv2.EVENT_LBUTTONDOWN:
      print('左键点击')
      print(f'({x},{y})')

   # 在图像上把坐标作为文本显示
   cv2.putText(img, f'({x},{y})', (x, y),   cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
   cv2.circle(img, (x, y), 3, (0, 0, 255), -1)
   if event == cv2.EVENT_RBUTTONDOWN:
      print('右键点击')
      print(f'({x},{y})')

      # 在图像上把坐标作为文本显示
      cv2.putText(img, f'({x},{y})', (x, y),
      cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2)
      cv2.circle(img, (x, y), 3, (0, 0, 255), -1)

# 读取输入图像
img = cv2.imread('back2school.jpg')

# 创建一个窗口
cv2.namedWindow('Point Coordinates')

# 将回调函数绑定到窗口
cv2.setMouseCallback('Point Coordinates', click_event)

# 显示图像
while True:
   cv2.imshow('Point Coordinates', img)
   k = cv2.waitKey(1) & 0xFF
   if k == 27:
      break
cv2.destroyAllWindows()
Python

输出结果

当您执行上述代码时,它将生成以下 输出结果

左键单击
(84,95)
左键单击
(322,66)
右键单击
(262,160)
右键单击
(464,274)
右键单击
(552,45)
左键单击
(162,337)
左键单击
(521,140)
右键单击
(101,243)
左键单击
(463,386)
右键单击
(58,418)
Python

然后我们获得了下面的窗口,显示输出 输出

OpenCV Python - 如何在图像上显示点击点的坐标?

在上述输出图像中,用红色绘制了点,用蓝色表示点坐标(左单击),用黄色表示点坐标(右单击)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV

登录

注册