使用 OpenCV 在 Python 中绘制基本图形

ops/2024/11/2 9:00:18/
概述

在图像处理和计算机视觉领域,OpenCV 是一个非常强大的工具包。它提供了许多函数来帮助开发者完成图像处理任务,包括绘制基本图形。本文将详细介绍如何使用 OpenCV 在 Python 中绘制基本图形,并通过具体的代码示例来展示整个过程。

环境准备

在开始之前,请确保已经安装了 OpenCV 库。如果没有安装,可以通过以下命令进行安装:

pip install opencv-python
示例代码详解
python">import cv2
import numpy as npdef draw_img():"""绘制图像:return:"""# 创建空白图像"""这行代码的作用是创建一个空的图像数组。我们逐步分解并详细解释如下:np.zeros(...):这是NumPy库中的一个函数,用于创建一个指定形状的数组并填充为零。在这个上下文中,我们使用np.zeros()来初始化一个图像的数组。shape=(512, 512, 3):shape参数是一个元组,指定了数组的形状。(512, 512)表示图像的高度和宽度都是512像素,它是一个正方形的图像。3表示图像的颜色通道数,通常在OpenCV中是指蓝色、绿色和红色(BGR顺序)。因此,这个数组有三个通道。dtype=np.uint8:dtype参数指定数组中元素的数据类型。np.uint8表示无符号8位整数,取值范围是0到255,这个范围适合表示RGB颜色值。每个颜色通道的像素值都在这个范围内。总结而言,这行代码用于创建一个512x512像素的空图像,初始颜色为黑色(因为所有的像素值都被初始化为0)。这个图像可以用来后续的绘制和图像处理。主要功能是在内存中分配一个用于图像处理的基础数组。"""img = np.zeros(shape=(512, 512, 3), dtype=np.uint8)# 通道顺序为BGRprint(img.shape)# 高、宽、通道# img[:, :, :] = 255, 0, 0# img[200:400, 0:250, :] = 255, 0, 0'''cv2.line(img, pt1, pt2, color, thickness)这行代码使用OpenCV库中的cv2.line函数在图像上绘制一条直线。下面逐步分解并详细解释各个参数及其功能:函数名称:cv2.line():这是OpenCV中用于绘制直线的函数。参数:img:这是要在其上绘制直线的图像数组。这个图像是在之前代码中创建的一个512x512像素的空图像。pt1=(10, 10):这个参数指定了直线起点的坐标。在此例中,直线的起点是图像的坐标(10, 10),表示距离图像左上角10个像素宽和10个像素高的位置。pt2=(100, 200):这个参数指定了直线终点的坐标。直线的终点是图像的坐标(100, 200),表示距离左上角100个像素宽和200个像素高的位置。color=(0, 0, 255):这是直线的颜色,格式为BGR(蓝、绿、红)值。在这里,(0, 0, 255)表示红色。thickness=3:这是绘制直线的宽度,单位为像素。在这个例子中,直线的宽度为3个像素。'''cv2.line(img, pt1=(10, 10), pt2=(100, 200), color=(0, 0, 255), thickness=3)'''pt2=(img.shape[1], 300):这个参数指定了直线的终点坐标。img.shape[1]返回图像的宽度(512),因此终点坐标是(512, 300),即直线终点在图像的右侧表示直线的终点在图像的右侧,水平坐标为512,垂直坐标仍然是300,即直线与起点同高度。'''cv2.line(img, pt1=(0, 300), pt2=(img.shape[1], 300), color=(0, 128, 255), thickness=1)# cv2.rectangle():这是OpenCV中用于绘制矩形的函数。# thickness=cv2.FILLED:这个参数指定矩形的边框厚度。在本例中,使用cv2.FILLED常量表示矩形将被填充为指定颜色,而不是仅绘制边框。cv2.rectangle(img, pt1=(200, 100), pt2=(img.shape[1], 200), color=(255, 0, 0), thickness=cv2.FILLED)# cv2.circle():这是OpenCV中用于绘制圆形的函数。radius=30:这个参数指定了圆的半径。值30表示这个圆的半径为30像素。cv2.circle(img, center=(50, 250), radius=30, color=(255, 255, 0), thickness=1)"""函数名称:cv2.putText():这是OpenCV中用于在图像上绘制文本的函数。参数解析:img:这是目标图像数组,文本将绘制在这个图像上。在本代码中,这个图像是之前创建的512x512像素的空图像,并且已经用其他绘制函数添加了图形。'opencv Hello World!':这是要绘制的文本内容。在这个例子中,文本为“opencv Hello World!”。org=(200, 300):这个参数指定了文本的起始位置坐标(x, y)。(200, 300)表示文本的左下角将位于图像中的坐标(200, 300),即距离左边200像素、距离上边300像素的位置。fontFace=cv2.FONT_HERSHEY_SIMPLEX:这个参数指定使用的字体类型。在本例中,选择了FONT_HERSHEY_SIMPLEX,这是OpenCV提供的一个简单的无衬线字体。fontScale=0.8:这个参数指定字体的缩放因子。值0.8表示字体的大小是默认大小的0.8倍,调整这个参数可以改变文本的大小。color=(128, 255, 0):这是文本的颜色,格式为BGR(蓝、绿、红)值。在这里,(128, 255, 0)表示一种亮绿色,含有中等的蓝色成分、较强的绿色成分和无红色成分。thickness=1:这个参数指定文本的线宽,单位为像素。值1表示文本的边缘宽度为1个像素。"""cv2.putText(img, 'opencv Hello World!', org=(200, 300),fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=0.8, color=(128, 255, 0), thickness=1)cv2.imshow('img', img)cv2.waitKey(0)if __name__ == '__main__':draw_img()
代码解析
  1. 创建空白图像

    python">img = np.zeros(shape=(512, 512, 3), dtype=np.uint8)
    
    • 这行代码的作用是创建一个空的图像数组。
    • np.zeros(...):创建一个指定形状的数组并填充为零。
    • shape=(512, 512, 3):创建一个512x512像素的空图像,颜色通道数为3(BGR)。
    • dtype=np.uint8:数组中元素的数据类型为无符号8位整数,取值范围是0到255,适合表示RGB颜色值。
    • 这行代码用于创建一个512x512像素的空图像,初始颜色为黑色(因为所有的像素值都被初始化为0)。
  2. 打印图像形状

    python">print(img.shape)
    
    • img.shape 返回图像的形状信息,即高度、宽度和颜色通道数。
  3. 绘制一条红色直线

    python">cv2.line(img, pt1=(10, 10), pt2=(100, 200), color=(0, 0, 255), thickness=3)
    
    • cv2.line() 用于在图像上绘制一条直线。
    • pt1=(10, 10):直线起点坐标。
    • pt2=(100, 200):直线终点坐标。
    • color=(0, 0, 255):直线的颜色为红色。
    • thickness=3:直线的宽度为3个像素。
  4. 绘制一条橙色水平线

    python">cv2.line(img, pt1=(0, 300), pt2=(img.shape[1], 300), color=(0, 128, 255), thickness=1)
    
    • pt2=(img.shape[1], 300):水平线终点坐标,img.shape[1] 返回图像的宽度(512)。
  5. 绘制一个蓝色填充矩形

    python">cv2.rectangle(img, pt1=(200, 100), pt2=(img.shape[1], 200), color=(255, 0, 0), thickness=cv2.FILLED)
    
    • cv2.rectangle() 用于在图像上绘制矩形。
    • thickness=cv2.FILLED:矩形将被填充为指定颜色。
  6. 绘制一个黄色圆圈

    python">cv2.circle(img, center=(50, 250), radius=30, color=(255, 255, 0), thickness=1)
    
    • cv2.circle() 用于在图像上绘制圆圈。
    • center=(50, 250):圆心坐标。
    • radius=30:圆的半径为30像素。
    • color=(255, 255, 0):圆的颜色为黄色。
    • thickness=1:圆的线宽为1个像素。
  7. 在图像上绘制文本

    python">cv2.putText(img, 'opencv Hello World!', org=(200, 300),fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=0.8, color=(128, 255, 0), thickness=1)
    
    • cv2.putText() 用于在图像上绘制文本。
    • org=(200, 300):文本的起始位置坐标。
    • fontFace=cv2.FONT_HERSHEY_SIMPLEX:使用的字体类型。
    • fontScale=0.8:字体的缩放因子。
    • color=(128, 255, 0):文本的颜色为亮绿色。
    • thickness=1:文本的线宽为1个像素。
  8. 显示图像

    python">cv2.imshow('img', img)
    cv2.waitKey(0)
    
    • cv2.imshow() 用于显示图像。
    • cv2.waitKey(0) 使窗口等待按键事件。
总结

本文详细介绍了如何使用 OpenCV 在 Python 中绘制基本图形,并通过具体的代码示例展示了整个过程。通过使用 OpenCV 库中的 cv2.line()cv2.rectangle()cv2.circle()cv2.putText() 函数,我们可以轻松地在图像上绘制直线、矩形、圆圈和文本。



http://www.ppmy.cn/ops/130378.html

相关文章

HTTP返回码和其含义

HTTP返回码是用来表示HTTP请求的结果状态的数字代码。它们分为五类,每类都有特定的含义: 1xx - 信息性状态码 100 Continue: 继续请求,客户端可以继续发送请求的剩余部分。101 Switching Protocols: 服务器接受客户端的协议切换请求。 2xx…

如何在Linux系统中使用Ansible进行自动化部署

如何在Linux系统中使用Ansible进行自动化部署 Ansible简介 安装Ansible 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 Ansible的基本概念 Inventory文件 Playbooks Modules 创建Inventory文件 编写第一个Playbook 创建Playbook文件 运行Playbook 使用Handlers 编写包…

不适合的学习方法

文章目录 不适合的学习方法1. 纯粹死记硬背2. 过度依赖单一资料3. 线性学习4. 被动学习5. 一次性学习6. 忽视实践7. 缺乏目标导向8. 过度依赖技术9. 忽视个人学习风格10. 过于频繁的切换 结论 以下是关于不适合的学习方法的更详细描述,包括额外的内容和相关公式&…

RabbitMQ 安装(Windows版本)和使用

安装 安装包获取 可以自己找资源,我这里也有百度云的资源,如果没失效的话可以直接用。 通过百度网盘分享的文件:RabbitMQ 链接:https://pan.baidu.com/s/1rzcdeTIYQ4BqzHLDSwCgyw?pwdfj79 提取码:fj79 安装教程…

智慧用电监控装置:引领0.4kV安全用电新时代

在智能科技日新月异的今天,电力安全与管理正迎来一场前所未有的革新。为0.4kV以下TT、TN系统打造的智慧用电在线监控装置不仅重新定义了电力监控的边界,更为建筑安全用电筑起了一道坚不可摧的防线。 装置集成了单、三相交流电精确测量、四象限电能计量、…

Linux中部署PostgreSQL保姆级教程

一、版本说明 本文采用的版本号是postgresql-14.4。 官网资源包下载地址:PostgreSQL: File Browser 二、安装前的准备 2.1安装依赖 2.1.1安装编译工具 yum install -y gcc gcc-c这个命令安装了 GNU 编译器集合(gcc)和 GNU C 编译器&#x…

ubuntu运行gazebo导致内存越来越少

1.用vscode看代码会一直有没用的日志缓存,可以删掉(文件夹留着,可以把里面的东西删掉) 2.运行gazebo的模型会有很多缓存文件,可以删掉 log文件夹非常大

LiteSpeed Cache WordPress 插件漏洞让黑客获得管理员访问权限

流行的 WordPress 插件 LiteSpeed Cache 的免费版本已修复其最新版本中的一个危险的权限提升漏洞,该漏洞可能允许未经身份验证的网站访问者获得管理员权限。 LiteSpeed Cache 是一个超过六百万个 WordPress 网站使用的缓存插件,有助于加快速度并改善用户…