如何使用Mouse Events绘制圆?(OpenCV Python实现)

鼠标事件有不同类型,例如左或右键点击,鼠标移动,左键双击等。 OpenCV为我们提供不同类型的鼠标事件,例如 cv2.EVENT_LBUTTONDOWN 表示鼠标左键按下, cv2.EVENT_RBUTTONDOWN 表示右键按下, cv2.EVENT_LBUTTONDBLCLK 表示左键双击等其他事件。

鼠标事件返回鼠标事件的坐标(x,y)。为了在事件发生时执行动作,我们定义了一个Mouse Callback Function。我们可以使用鼠标事件在图像上绘制圆。

步骤

要使用鼠标事件绘制圆,请按照以下步骤进行:

  • 导入所需库 OpenCV 。请确保您已经安装了它。
  • 创建一个黑色图像。我们在这个黑色图像上绘制圆。我们还使用 cv2.imread() 方法读取图像以在其上绘制圆。

  • 定义Mouse Callback Function来绘制图像上的圆。 当发生鼠标事件时,将执行Mouse Callback Function。鼠标事件会给出鼠标事件的坐标。在这里,我们定义了一个Mouse Callback Function,用于在鼠标左键按下时绘制圆。

  • 创建一个窗口,并将Mouse Callback Function绑定到此窗口。

  • 显示图像窗口。此窗口打开我们在其上绘制圆的图像。要关闭窗口,按下 ESC 按钮。

让我们查看一些程序示例,以了解其工作原理。

程序示例

在此Python程序中,我们在鼠标左键按下时绘制圆。

# 导入所需库
import cv2
import numpy as np

# 定义一个(黑色)图像,在该图像上将绘制圆
img = np.zeros((512,700,3), np.uint8)

# 定义Mouse Callback Function来绘制圆
def draw_circle(event, x, y, flags, param):
      if event == cv2.EVENT_LBUTTONDOWN:
         cv2.circle(img, (x, y), 100, (0, 255, 255), 2)

# 创建一个窗口
cv2.namedWindow("Circle Window")# 将Mouse Callback Function绑定到窗口
cv2.setMouseCallback("Circle Window", draw_circle)

# 显示图像
while True:
   cv2.imshow("Circle Window", img)
   if cv2.waitKey(20) & 0xFF == 27:
      break
cv2.destroyAllWindows()

当您执行上述Python代码时,它将打开一个名为“圆形窗口”的窗口,显示一张黑色图片。在窗口上单击鼠标左键,将绘制一个半径为100px的圆。如下所示的输出窗口,我们共绘制了五个圆。

输出

如何使用Mouse Events绘制圆?(OpenCV Python实现)

示例

在这个Python程序中,我们使用拖动鼠标画圆。绘制的圆有不同的半径。

import numpy as np
import cv2
import math
drawing = False # true if mouse is pressed
ix, iy = -1, -1

# 定义鼠标回调函数以绘制圆
def draw_circle(event, x, y, flags, param):
   global ix, iy, drawing
   if event == cv2.EVENT_LBUTTONDOWN:
      drawing = True

      # 记录鼠标位置
      ix, iy = x, y
   elif event == cv2.EVENT_MOUSEMOVE:
      drawing == True
   elif event == cv2.EVENT_LBUTTONUP:
      radius = int(math.sqrt(((ix - x) ** 2) + ((iy - y) ** 2)))
      cv2.circle(img, (ix, iy), radius, (255, 0, 255), thickness=2)
      drawing = False

# 创建一张黑色图片
img = np.zeros((512, 700, 3), np.uint8)

# 创建窗口
cv2.namedWindow('Drag Circle Window')

# 将回调函数绑定到上述定义的窗口上
cv2.setMouseCallback('Drag Circle Window', draw_circle)

# 显示图片
while True:
   cv2.imshow('Drag Circle Window', img)
   k = cv2.waitKey(1) & 0xFF
   if k == 27:
      break
cv2.destroyAllWindows()

当您执行上述Python代码时,它将打开一个显示黑色图像的窗口。我们可以通过拖动鼠标在图像上绘制一个圆。绘制圆的过程是先按下左键 (EVENT_LBUTTONDOWN) ,然后移动鼠标 (EVENT_MOUSEMOVE) ,最后释放按钮 (EVENT_LBUTTONUP) 。

输出

如何使用Mouse Events绘制圆?(OpenCV Python实现)

示例

在这个Python程序中,我们使用鼠标双击图像来绘制实心圆。

import numpy as np
import cv2

# 鼠标回调函数
def draw_circle(event,x,y,flags,param):
   if event == cv2.EVENT_LBUTTONDBLCLK:
   cv2.circle(img,(x,y),100,(255,0,0),-1)

# 读入输入图片
img = cv2.imread('3D.jpg')

# 创建一个窗口
cv2.namedWindow('Filled Circle Window')

# 将回调函数绑定至窗口
cv2.setMouseCallback('Filled Circle Window', draw_circle)

# 显示图片
while True:
   cv2.imshow('Filled Circle Window', img)
   if cv2.waitKey(1) & 0xFF == 27:
      break
cv2.destroyAllWindows()

当您执行上述Python代码时,它将打开一个窗口,显示输入图片。在图片中的某点上双击(EVENT_LBUTTONDBLCLK)可画出一个填充的圆。

输出

如何使用Mouse Events绘制圆?(OpenCV Python实现)

 为帮助更多对人工智能感兴趣的小伙伴们能够有效的系统性的学习以及论文的研究,小编特意制作整理了一份人工智能学习资料给大家,整理了很久,非常全面。

大致内容包括一些人工智能基础入门视频和文档+AI常用框架实战视频、计算机视觉、机器学习、图像识别、NLP、OpenCV、YOLO、pytorch、深度学习与神经网络等学习资料、课件源码、国内外知名精华资源、以及AI热门论文等全套学习资料。

 需要以上这些文中提到的资料,请点击此处→【人工智能全套完整VIP资料】即可免费获取。

看完三件事❤️

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注作者公众号 『 python深度学习NLP 』,不定期分享原创知识。
  • 关注后回复【666】扫码即可获取学习资料包。
  • 同时可以期待后续文章ing🚀。
     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值