Opencv Python 如何在图像上显示点击点的坐标

Opencv Python 如何在图像上显示点击点的坐标

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

步骤

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

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

  • 定义一个鼠标回调函数,以显示在输入图像上点击点的坐标。当发生鼠标事件时,将执行鼠标回调函数。鼠标事件提供鼠标事件的坐标(x,y)。在此回调函数中,我们将显示文本(坐标)和点(小半径圆圈)。

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

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

  • 显示图像窗口。该窗口打开输入图像,在该图像上我们显示鼠标事件发生的点的坐标。按esc按钮关闭窗口。

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

输入图像

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

Opencv Python 如何在图像上显示点击点的坐标

示例

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

# import the required library
import cv2

# define a function to display the coordinates of

# of the points clicked on the image
def click_event(event, x, y, flags, params):
   if event == cv2.EVENT_LBUTTONDOWN:
      print(f'({x},{y})')

      # put coordinates as text on the image
      cv2.putText(img, f'({x},{y})',(x,y),
      cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

      # draw point on the image
      cv2.circle(img, (x,y), 3, (0,255,255), -1)

# read the input image
img = cv2.imread('back2school.jpg')

# create a window
cv2.namedWindow('Point Coordinates')

# bind the callback function to window
cv2.setMouseCallback('Point Coordinates', click_event)

# display the image
while True:
   cv2.imshow('Point Coordinates',img)
   k = cv2.waitKey(1) & 0xFF
   if k == 27:
      break
cv2.destroyAllWindows()

输出

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

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

我们将得到以下窗口显示 输出

Opencv Python 如何在图像上显示点击点的坐标

在上面的输出图像中,用黄色绘制点,点的坐标以红色显示

示例

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

# import required library
import cv2

# function to display the coordinates of the points clicked on the image
def click_event(event, x, y, flags, params):

   # checking for left mouse clicks
   if event == cv2.EVENT_LBUTTONDOWN:
      print('Left Click')
      print(f'({x},{y})')

   # put coordinates as text on the image
   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('Right Click')
      print(f'({x},{y})')

      # put coordinates as text on the image
      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)

# read the input image
img = cv2.imread('back2school.jpg')

# create a window
cv2.namedWindow('Point Coordinates')

# bind the callback function to window
cv2.setMouseCallback('Point Coordinates', click_event)

# display the image
while True:
   cv2.imshow('Point Coordinates', img)
   k = cv2.waitKey(1) & 0xFF
   if k == 27:
      break
cv2.destroyAllWindows()

输出

当您执行上面的代码时,它将产生以下 输出

Left Click
(84,95)
Left Click
(322,66)
Right Click
(262,160)
Right Click
(464,274)
Right Click
(552,45)
Left Click
(162,337)
Left Click
(521,140)
Right Click
(101,243)
Left Click
(463,386)
Right Click
(58,418)

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

Opencv Python 如何在图像上显示点击点的坐标

在上面的输出图片中,点用红色绘制,点的坐标(左键点击)用蓝色,点的坐标(右键点击)用黄色。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程