OpenCV Python教程:如何使用鼠标事件绘制矩形?

OpenCV Python教程:如何使用鼠标事件绘制矩形?

OpenCV是一个流行的计算机视觉库,目前支持许多编程语言,包括Python。本篇教程将会介绍如何使用鼠标事件绘制矩形。

准备工作

在开始之前,您需要安装OpenCV和Python。如果您还没有安装,可以使用以下命令:

pip install opencv-python

任务描述

我们希望通过鼠标事件绘制矩形。为此,我们需要执行以下任务:

  1. 创建一个画布
  2. 为画布添加鼠标事件,以绘制矩形

创建画布

要绘制矩形,我们需要创建一个画布。这可以通过以下代码实现:

import cv2

canvas = cv2.imread('canvas.jpg')
cv2.imshow('Canvas', canvas)
cv2.waitKey()

该代码通过OpenCV读取了名为“canvas.jpg”的图像,并作为画布显示。

添加鼠标事件

一旦画布准备就绪,我们可以通过添加鼠标事件开始绘制矩形。我们需要执行以下步骤:

  1. 创建鼠标事件函数
  2. 注册鼠标事件
  3. 绘制矩形

创建鼠标事件函数

我们需要创建一个鼠标事件函数,以响应鼠标事件。该函数必须接收以下参数:

  1. event:事件类型
  2. x:鼠标指针的x坐标
  3. y:鼠标指针的y坐标
  4. flags:额外的事件标志

以下是创建鼠标事件函数的示例代码:

def draw_rectangle(event, x, y, flags, params):
    global canvas, start_point, end_point, drawing

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        start_point = (x, y)

    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing:
            canvas_copy = canvas.copy()
            end_point = (x, y)
            cv2.rectangle(canvas_copy, start_point, end_point, (0, 255, 0), 2)
            cv2.imshow('Canvas', canvas_copy)

    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        end_point = (x, y)
        cv2.rectangle(canvas, start_point, end_point, (0, 255, 0), 2)
        cv2.imshow('Canvas', canvas)

该函数在鼠标按下时记录起始点,在鼠标移动时使用当前点和起始点绘制矩形,并在鼠标弹起时绘制最终矩形。

注册鼠标事件

我们需要注册鼠标事件,在画布上响应鼠标事件。以下是注册鼠标事件的示例代码:

drawing = False
start_point = (-1, -1)
end_point = (-1, -1)

cv2.namedWindow('Canvas')
cv2.setMouseCallback('Canvas', draw_rectangle)

该代码使用namedWindow函数创建一个名为“Canvas”的窗口,并使用setMouseCallback函数将draw_rectangle函数注册到该窗口。我们还定义了一些变量,以帮助跟踪划定矩形的起始和最终点。

绘制矩形

最后,我们可以在画布上使用鼠标绘制矩形。运行以下代码并在画布上左键点击并拖动以绘制矩形:

cv2.imshow('Canvas', canvas)
cv2.waitKey()

整合代码

接下来,我们将完整的绘制矩形代码整合在一起:

import cv2

def draw_rectangle(event, x, y, flags, params):
    global canvas, start_point, end_point, drawing

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        start_point = (x, y)

    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing:
            canvas_copy = canvas.copy()
            end_point = (x, y)
            cv2.rectangle(canvas_copy, start_point, end_point, (0, 255, 0), 2)
            cv2.imshow('Canvas', canvas_copy)

    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        end_point = (x, y)
        cv2.rectangle(canvas, start_point, end_point, (0, 255, 0), 2)
        cv2.imshow('Canvas', canvas)


drawing = False
start_point = (-1, -1)
end_point = (-1, -1)

canvas = cv2.imread('canvas.jpg')
cv2.imshow('Canvas', canvas)

cv2.namedWindow('Canvas')
cv2.setMouseCallback('Canvas', draw_rectangle)

cv2.waitKey()
cv2.destroyAllWindows()

结论

通过本篇教程,我们学习了如何使用鼠标事件在OpenCV中绘制矩形。这可以帮助您创建各种基于用户交互的计算机视觉应用程序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Python OpenCV