当前位置: 首页 > news >正文

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

概述

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

环境准备

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

pip install opencv-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. 创建空白图像

    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. 打印图像形状

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

    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. 绘制一条橙色水平线

    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. 绘制一个蓝色填充矩形

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

    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. 在图像上绘制文本

    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. 显示图像

    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.mrgr.cn/news/63960.html

相关文章:

  • 【银河麒麟高级服务器操作系统】虚拟机lvm分区丢失现象分析及解决建议
  • 【密码学】BFV/BGV全同态加密方案浅析
  • 38.第二阶段x86游戏实战2-HOOK窗口消息机制(解决多开窗口句柄问题)
  • 青少年编程能力等级测评CPA Python编程(一级)
  • NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?
  • 硅谷甄选(8)spu
  • 全国高校计算机能力挑战赛 Python
  • flutter ios ffi 调试 .a文件 debug可以 release 不行
  • RabbitMQ最全教程-Part2(高阶使用)
  • 嵌入式Linux系统中GPIO实验详解
  • vscode markdown-image 图片粘贴自动上传到本地目录设置
  • 什么品牌的护眼台灯比较好?五款护眼效果比较明显的护眼台灯
  • 对于图像的关键点数据提取openpose
  • 第三百零八节 Log4j教程 - Log4j日志到数据库
  • AWS RDS MySQL内存使用
  • Caffeine 手动策略缓存 put() 方法源码解析
  • Copilot功能
  • 单例模式的五种实现方式及优缺点
  • 从0开始学统计-什么是Z-score
  • 【国产MCU系列】-GD32F4开发环境搭建(基于Embedded Builder)
  • 自动化测试工具Ranorex Studio(十九)-其他编辑选项
  • HTML 基础标签——分组标签 <div>、<span> 和基础语义容器
  • magic-api简单使用六:删除接口(支持路径传参)
  • 从实验室到生活:超分子水凝胶湿电发电机的应用之路
  • 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!
  • 学生党百元预算如何选到高性价比头戴耳机?四款百元热门耳机推荐