21xrx.com
2024-12-22 17:55:45 Sunday
登录
文章检索 我的文章 写文章
使用OpenCV实现双击左键可清除绘制的图形
2023-11-06 13:45:04 深夜i     --     --
OpenCV 双击 左键 清除 绘制的图形

OpenCV是一个功能强大的计算机视觉库,它可以用于图像处理和计算机视觉任务。在本文中,我们将学习如何使用OpenCV实现一个简单的功能:双击左键可清除绘制的图形。

首先,我们将导入所需的库:


import cv2

import numpy as np

接下来,我们需要创建一个回调函数来处理双击事件。我们将使用这个函数来检测是否双击左键,并将鼠标的位置保存在全局变量中。


def draw_circle(event, x, y, flags, param):

  global drawing, mode, ix, iy

  if event == cv2.EVENT_LBUTTONDBLCLK:

    drawing = True

    ix, iy = x, y

接下来,我们将创建一个窗口并将回调函数与窗口绑定。


# 创建一个黑色图像

img = np.zeros((512, 512, 3), np.uint8)

cv2.namedWindow('image')

cv2.setMouseCallback('image', draw_circle)

然后,我们将创建一个简单的循环来检测用户的行为。如果用户按下了键盘上的ESC键,我们将退出循环。否则,我们将继续检测双击事件。


while True:

  cv2.imshow('image', img)

  k = cv2.waitKey(1) & 0xFF

  if k == 27:

    break

最后,我们将在循环内部添加一些逻辑来绘制图形和清除图形。如果用户双击了左键,我们将在图像上绘制一个圆形。如果用户按下了键盘上的c键,我们将清除图像。


  if drawing:

    cv2.circle(img, (x, y), 10, (0, 0, 255), -1)

  if k == ord('c'):

    img = np.zeros((512, 512, 3), np.uint8)

现在,我们可以运行代码并在窗口中双击左键来绘制图形。如果您想清除图形,只需按下键盘上的c键。

完整的代码如下:


import cv2

import numpy as np

drawing = False

ix, iy = -1, -1

def draw_circle(event, x, y, flags, param):

  global drawing, mode, ix, iy

  if event == cv2.EVENT_LBUTTONDBLCLK:

    drawing = True

    ix, iy = x, y

img = np.zeros((512, 512, 3), np.uint8)

cv2.namedWindow('image')

cv2.setMouseCallback('image', draw_circle)

while True:

  cv2.imshow('image', img)

  k = cv2.waitKey(1) & 0xFF

  if k == 27:

    break

  if drawing:

    cv2.circle(img, (x, y), 10, (0, 0, 255), -1)

  if k == ord('c'):

    img = np.zeros((512, 512, 3), np.uint8)

cv2.destroyAllWindows()

通过使用OpenCV,我们可以轻松地实现双击左键可清除绘制的图形的功能。这个简单的示例向我们展示了OpenCV在计算机视觉任务中的强大功能。希望这篇文章对你有帮助!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复