21xrx.com
2025-02-19 05:37:43 Wednesday
文章检索 我的文章 写文章
使用OpenCV实现双击左键可清除绘制的图形
2023-11-06 13:45:04 深夜i     10     0
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在计算机视觉任务中的强大功能。希望这篇文章对你有帮助!

  
  

评论区