python 基于opencv 实现一个鼠标绘图小程序

下面我将为您详细讲解“python基于opencv实现一个鼠标绘图小程序”的完整攻略。

简介

本文介绍如何使用Python和OpenCV库来实现一个简单的鼠标绘图小程序。主要包含以下步骤:

  1. 创建窗口
  2. 绑定鼠标事件
  3. 绘制图形
  4. 退出程序

创建窗口

首先需要导入OpenCV库并创建一个窗口。可以使用cv2.namedWindow()函数来创建一个窗口,并指定窗口的名称和大小。

import cv2

# 创建窗口并设置名称和大小
cv2.namedWindow("Mouse Drawing")
cv2.resizeWindow("Mouse Drawing", 640, 480)

# 显示窗口
cv2.imshow("Mouse Drawing", img)

绑定鼠标事件

接下来,需要设置鼠标事件。OpenCV提供了cv2.setMouseCallback()函数来设置鼠标事件。可以使用以下代码来设置一个鼠标点击事件。

# 定义鼠标事件处理函数
def draw_circle(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        # 绘制圆形
        cv2.circle(img, (x, y), 25, (0, 0, 255), -1)

# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_circle)

以上代码定义了一个鼠标事件处理函数draw_circle(),用于在窗口中绘制圆形。使用cv2.setMouseCallback()函数将draw_circle()绑定到Mouse Drawing窗口的鼠标事件中。

绘制图形

现在已经成功绑定了鼠标事件,下一步是在窗口中实现绘制图形功能。此处以绘制圆形为例。

这里使用cv2.circle()函数来绘制圆形。在鼠标事件处理函数中调用该函数并传递所需参数。

# 定义鼠标事件处理函数
def draw_circle(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        # 绘制圆形
        cv2.circle(img, (x, y), 25, (0, 0, 255), -1)

# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_circle)

以上代码当鼠标左键按下时,在img图像上绘制一个半径为25的红色圆形。

退出程序

当完成绘图后,需要按ESC键退出程序。使用cv2.waitKey()函数来等待用户按下键盘上的某个键。

while True:
    cv2.imshow("Mouse Drawing", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break

# 关闭窗口
cv2.destroyAllWindows()

以上代码在一个无限循环中等待用户按下键盘上的某个键。当用户按下ESC键时,关闭窗口并释放内存。

示例

下面是两个示例,第一个示例演示如何在图像中绘制直线,第二个示例演示如何在图像中绘制矩形。

示例1:绘制直线

import cv2

# 创建窗口并设置名称和大小
cv2.namedWindow("Mouse Drawing")
cv2.resizeWindow("Mouse Drawing", 640, 480)

# 创建一张空白图像
img = cv2.imread("test.jpg")
img = cv2.resize(img, (640, 480))

# 定义鼠标事件处理函数
def draw_line(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        # 设置起点
        cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
        param["start_point"] = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        # 设置终点
        cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
        param["end_point"] = (x, y)
        # 绘制直线
        cv2.line(img, param["start_point"], param["end_point"], (0, 255, 0), 2)

# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_line, {"start_point": None, "end_point": None})

# 循环显示图像,按ESC键退出程序
while True:
    cv2.imshow("Mouse Drawing", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break

# 关闭窗口
cv2.destroyAllWindows()

示例2:绘制矩形

import cv2

# 创建窗口并设置名称和大小
cv2.namedWindow("Mouse Drawing")
cv2.resizeWindow("Mouse Drawing", 640, 480)

# 创建一张空白图像
img = cv2.imread("test.jpg")
img = cv2.resize(img, (640, 480))

# 定义鼠标事件处理函数
def draw_rectangle(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        # 设置起点
        cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
        param["start_point"] = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        # 设置终点
        cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
        param["end_point"] = (x, y)
        # 绘制矩形
        cv2.rectangle(img, param["start_point"], param["end_point"], (0, 255, 0), 2)

# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_rectangle, {"start_point": None, "end_point": None})

# 循环显示图像,按ESC键退出程序
while True:
    cv2.imshow("Mouse Drawing", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break

# 关闭窗口
cv2.destroyAllWindows()

以上就是“python基于opencv实现一个鼠标绘图小程序”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 基于opencv 实现一个鼠标绘图小程序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • PyCharm在win10的64位系统安装实例

    下面是我们来介绍一下“PyCharm在Win10的64位系统安装实例”。 安装前准备 在进行安装前,我们需要先检查一下系统环境是否满足安装要求。 确认系统版本 首先我们需要确认一下自己的Windows系统版本是否是64位系统。 打开“设置”-“系统”-“关于”,在“系统类型”一栏中可以看到系统的位数,确保是“64位操作系统”。 安装Python 在安装PyC…

    python 2023年5月30日
    00
  • python图片二值化提高识别率代码实例

    下面我将详细讲解“python图片二值化提高识别率代码实例”的完整攻略。 什么是图片二值化? 图片二值化是将彩色或灰度图像转换为黑白(二值)图像的过程。在二值图像中,每个像素的像素值只有两种可能:0或1。通常情况下,0代表黑色,1代表白色。将图像转换为二值图像有助于减少噪声,提高图像的识别率,以及减小处理图像所需的计算量。 如何使用Python进行二值化? …

    python 2023年5月18日
    00
  • Python3批量创建Crowd用户并分配组

    对于“Python3批量创建Crowd用户并分配组”的完整攻略,可以按照以下步骤进行: 1. 安装 Crowd SDK 首先,需要在本地安装 Crowd SDK,可以使用以下命令来安装: pip install atlassian-python-api 2. 创建 Crowd 应用和应用程序(Application) 在 Crowd 中创建一个应用和应用程序…

    python 2023年5月20日
    00
  • python 获取图片分辨率的方法

    Python 是一个非常适合处理图片的编程语言。获取图片的分辨率是我们处理图片时经常需要用到的一个操作。下面是 Python 中获取图片分辨率的完整攻略。 安装必要的库 要使用 Python 获取图片分辨率,我们需要使用到图片处理库 PIL 或 Pillow。Pillow 是 PIL 的加强版,因此我们使用 Pillow 比使用 PIL 更好。 使用以下命令…

    python 2023年5月19日
    00
  • Python语言快速上手学习方法

    Python语言快速上手学习方法 Python是一种易于学习、优雅且灵活的编程语言。如果你是初学者,或者有其他编程经验但想学习Python,以下是一些快速上手学习Python的方法。 安装和设置Python环境 首先,需要安装和设置Python环境。你可以从Python官方网站下载Python安装程序,然后按照向导步骤进行安装。安装完成后,在终端中输入“py…

    python 2023年5月13日
    00
  • python环境路径配置以及命令行运行脚本

    关于Python环境路径配置以及命令行运行脚本的攻略,可以分为以下几个步骤: 步骤一:确认Python已安装 在开始进行Python环境路径配置以及命令行运行脚本之前,需要确认Python已经安装在本地电脑上。可以在终端输入以下命令,查看Python是否已经安装以及版本号: python –version 如果已安装,则会显示Python的版本号;如果未安…

    python 2023年6月3日
    00
  • 我想在 Simpy Python 中从 FilterStore 中获取许多项目

    【问题标题】:I want go get many items from FilterStore in Simpy Python我想在 Simpy Python 中从 FilterStore 中获取许多项目 【发布时间】:2023-04-02 13:11:01 【问题描述】: 我想从 FilterStore 中获取许多项目。 factory.stock_pa…

    Python开发 2023年4月8日
    00
  • Python中集合类型(set)学习小结

    Python中集合类型(set)学习小结 概述 Python中的集合(set)是一种用于存储无序但唯一元素的数据类型。它基于数学中的集合概念,并且支持集合的各种数学运算。集合可以包含任何可哈希的数据类型,但集合本身是不可哈希的,而且没有顺序。 与列表和元组不同,集合没有索引,因此不能通过索引访问元素。但是,集合支持的操作范围更广,比如交集、并集、差集等等。 …

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部