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

yizhihongxing

下面我将为您详细讲解“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:使用由类组成的列表时,for循环和输入失败

    【问题标题】:Python: for loops and inputs fail when using a list made of classesPython:使用由类组成的列表时,for循环和输入失败 【发布时间】:2023-04-04 01:06:02 【问题描述】: class products: def __init__(self, id, siz…

    Python开发 2023年4月6日
    00
  • Python pywin32实现word与Excel的处理

    我来给你讲一下“Python pywin32实现word与Excel的处理”的完整实例教程。 1. Pywin32是什么? 在讲解具体的实现教程之前,我们需要了解一下 pywin32 是什么。Pywin32是Windows扩展模块的集合,它为Python提供了访问Windows API的能力,让Python能够与Windows本地的应用程序进行交互,这些应用…

    python 2023年5月13日
    00
  • Python对Excel进行处理的实操指南

    下面是对于“Python对Excel进行处理的实操指南”的完整实例教程,其中包含两条示例说明。 Python对Excel进行处理的实操指南 介绍 Python是一种功能强大的编程语言,可以进行各种数据处理和分析。在金融、商业、教育等行业,Excel是一种常用的数据处理工具。Python可以方便地对Excel进行读取、处理、分析和输出。 本文将介绍如何使用Py…

    python 2023年5月13日
    00
  • python读取tif图片时保留其16bit的编码格式实例

    要实现Python读取tif图片时保留其16bit的编码格式,需要使用Pillow库来打开图像文件并处理图像数据。Pillow是Python Imaging Library(PIL)的一个继承版本,可以很方便地在Python中处理图像数据。 以下是详细的步骤: 步骤1:安装Pillow库 可以使用pip命令安装Pillow库: pip install Pil…

    python 2023年5月31日
    00
  • python实例方法的使用注意及代码实例

    下面是关于Python实例方法的使用注意及代码实例的攻略。 什么是Python实例方法? Python实例方法是类中定义的一种方法类型。它与类方法和静态方法不同,实例方法是绑定到类的实例上的方法。因此,在调用实例方法时,需要使用类的实例对象。 实例方法的主要特点是可以访问类的实例对象的属性和方法,同时还可以通过self参数引用实例对象本身。 下面是一个例子,…

    python 2023年5月31日
    00
  • 详解Python 函数式编程设计模式

    Python函数式编程设计模式是指使用函数式编程思想和技术实现的一种设计模式。函数式编程设计模式以函数为核心,通过使用高级函数、lambda表达式和闭包等技术实现代码的抽象、复用和组合。以下是Python函数式编程设计模式的完整攻略。 1. 高阶函数 在函数式编程设计模式中,函数是一等公民,即函数可以作为参数传递给另一个函数,也可以作为返回值返回给调用者。这…

    python-answer 2023年3月25日
    00
  • Python scipy的二维图像卷积运算与图像模糊处理操作示例

    针对“Python scipy的二维图像卷积运算与图像模糊处理操作示例”,下面是完整攻略。本文主要介绍如何使用Python中的scipy库对二维图像进行卷积运算和图像模糊处理,包括示例说明。 一、卷积运算 1.1 卷积概念 卷积是一种在信号和图像处理中广泛使用的数学运算。在二维图像中,卷积可以处理一些图像滤波、边缘检测和特征提取等任务。 卷积的基本思想是对每…

    python 2023年6月5日
    00
  • 十分钟教会你用Python处理CSV文件

    下面是“十分钟教会你用Python处理CSV文件”的完整实例教程。 1. 下载CSV文件 首先我们需要获取一份CSV文件,你可以在网上搜索到各种不同样式的CSV文件,但为了本教程的目的,我们选择从 Kaggle 上下载一份经典的鸢尾花数据集。 你可以访问 这个链接,并下载名为 Iris.csv 的文件。 2. 导入CSV文件 下载完毕之后,我们需要使用 Py…

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