Python OpenCV 实现鼠标绘制矩形与圆形交互程序

陈默
陈默
发布时间:2026-10-15| 4人浏览过
原创

本文介绍如何使用 Python 和 OpenCV 实现一个交互式鼠标绘图小程序。通过定义鼠标回调函数捕获左键按下、移动和释放事件,结合模式切换逻辑,支持实时绘制矩形和圆形。按 M 键可在两种绘图模式间切换,按 ESC 键退出程序,代码完整且可直接运行。

需求

目标是在画布上实现鼠标绘图功能,支持绘制圆形或矩形。用户可以通过按下键盘上的 m 键在两种绘图模式之间进行切换。交互逻辑为:当鼠标左键按下时开始绘图,鼠标移动过程中实时绘制图形,当鼠标左键释放时结束当前图形的绘制。

实现思想

实现鼠标绘图功能需要定义鼠标的回调函数 mouse_event 来处理交互事件。为了区分绘制圆形或矩形,需要定义一个画图的模式变量 mode。系统需要捕获左键单击、鼠标移动和左键释放这三个不同的事件。此外,还需要定义一个画图标记位 drawing 来标识是否正在绘制图形,以控制绘图的开始和结束。

实现代码


import cv2 as cv
import numpy as np

drawing = False # 是否开始画图
mode = True # True:画矩形,False:画圆
start = (-1, -1)

# 鼠标的回调函数的参数格式是固定的,不要随意更改。
def mouse_event(event, x, y, flags, param):
  global start, drawing, mode

  # 左键按下:开始画图
  if event == cv.EVENT_LBUTTONDOWN:
    drawing = True
    start = (x, y)
  # 鼠标移动,画图
  elif event == cv.EVENT_MOUSEMOVE:
    if drawing:
      if mode:
        cv.rectangle(img, start, (x, y), (0, 255, 0), -1)
      else:
        cv.circle(img, (x, y), 5, (0, 0, 255), -1)
  # 左键释放:结束画图
  elif event == cv.EVENT_LBUTTONUP:
    drawing = False
    if mode:
      cv.rectangle(img, start, (x, y), (0, 255, 0), -1)
    else:
      cv.circle(img, (x, y), 5, (0, 0, 255), -1)


img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image', mouse_event)

while(True):
  cv.imshow('image', img)
  # 按下m切换模式
  if cv.waitKey(1) == ord('m'):
    mode = not mode
  # 按ESC键退出程序
  elif cv.waitKey(1) == 27:
    break

实验结果

以上就是 Python 基于 OpenCV 实现鼠标绘图小程序的详细内容,更多关于 Python 鼠标绘图的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。