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日

相关文章

  • 通过python-pptx模块操作ppt文件的方法

    下面是通过 Python-pptx 模块操作 PPT 文件的方法攻略: 安装 Python-pptx 模块 首先,需要安装 Python-pptx 模块,可以使用 pip 命令进行安装: pip install python-pptx 创建 PPT 接下来,可以使用 Python-pptx 模块创建一个新的 PPT 文件,示例代码如下: from pptx …

    python 2023年6月5日
    00
  • 如何利用python将一个py文件变成一个软件详解

    将Python程序转化为独立可执行文件可以方便程序的分发和使用。下面是一些关于如何利用Python将一个.py文件打包成应用程序的详细攻略。 一、PyInstaller的安装 我们可以使用PyInstaller这个第三方库来将Python程序转化为独立可执行文件。首先需要安装PyInstaller,安装方式如下: pip install pyinstalle…

    python 2023年5月18日
    00
  • Python接口自动化测试的实现

    Python接口自动化测试是一种常见的自动化测试方法,可以帮助我们更好地测试接口的功能和稳定性。本文将介绍Python接口自动化测试的实现,并提供两个示例。 1. 使用requests库实现接口自动化测试 我们使用requests库实现接口自动化测试。以下是一个示例,演示如何使用requests库实现接口自动化测试: import requests def …

    python 2023年5月15日
    00
  • Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例

    Python是一种广泛使用的高级语言,Scrapy是一个基于Python的网络爬虫框架,可以用于从网站上爬取数据。这个攻略将介绍Scrapy框架的CrawlSpider模块,提供一个通用的爬虫实现,可以根据用户的需求,定制特定的数据爬虫。 设置Scrapy环境 首先,我们需要设置Scrapy环境,并确保安装了Scrapy插件。在命令行中使用以下命令安装Scr…

    python 2023年5月14日
    00
  • Python简单计算给定某一年的某一天是星期几示例

    是的,下面是一份完整的攻略来计算给定某一年的某一天是星期几的Python程序。 安装所需的库 这个程序需要使用datetime库来处理日期和时间。如果您的Python环境没有datetime库,请使用以下命令安装。 pip install datetime 代码实现 首先,导入datetime库并定义要查询的日期(year、month和day)。 impor…

    python 2023年6月2日
    00
  • Python爬虫入门教程02之笔趣阁小说爬取

    下面是“Python爬虫入门教程02之笔趣阁小说爬取”的详细攻略。 一、准备工作 在开始爬取笔趣阁小说之前,需要安装相关的Python库。常用的爬虫库有requests、beautifulsoup4、re等。 使用pip命令安装: pip install requests pip install beautifulsoup4 pip install re 安…

    python 2023年5月14日
    00
  • Python基础篇之字符串方法总结

    Python基础篇之字符串方法总结 本篇文章总结了Python中常用的字符串方法,可供Python初学者参考学习。 1.字符串的索引与分片 字符串可以像列表一样进行索引和切片操作。 str = "hello world" print(str[0]) # 输出’h’ print(str[3:7]) # 输出’lo w’ 2.查找子字符串 s…

    python 2023年5月31日
    00
  • 利用OpenCV和Python实现查找图片差异

    利用 OpenCV 和 Python 实现查找图片差异 简介 在实际工作中,我们经常需要对图片进行对比分析,例如查找两张图片之间的差异。 OpenCV 是一个功能强大,易于使用的图像处理工具包,可以在 Python 环境下使用。本文将讲解如何利用 OpenCV 和 Python 实现查找图片差异的完整攻略。 环境准备 在开始之前,请确保您有以下工具和包: P…

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