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

news/2024/11/2 8:46:55/
概述

在图像处理和计算机视觉领域,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/news/1543820.html

相关文章

nacos+maven实现多环境配置

maven引入nacos依赖&#xff0c;须包含有配置中心config <!-- 服务注册/发现--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>&…

Python OpenCV 图像改变

更改图像数据 通过 改像素点 或者 切片的区域 import cv2 import numpy as np img cv2.imread("image.jpg") print(img[3,5]) # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成) img[3,5] (0,0,255) # 更改该位置的像素…

Java:网络编程套接字(socket)

TCP和UDP的区别: TCP:有连接,可靠传输,面向字节流,全双工; UDP:无连接,不可靠传输,面向数据报,全双工; 有连接/无连接: 此处的连接是"抽象"的连接: 通信双方如果保存了通信对端的信息,就相当于是"有连接"; 如果不保存对端的信息,就是"无连接&qu…

数据结构————map,set详解

今天带来map和set的详解&#xff0c;保证大家分清楚 一&#xff0c;概念 map和set是一种专门用来搜索的容器或数据结构 map能存储两个数据类型&#xff0c;我们称之为<key-value>模型 set只能存储一个数据类型&#xff0c;我们称之为纯<key>模型 它们的效率都非…

ATom:加州理工学院(CIT)化学电离质谱仪(CIMS)测量的气相有机和无机分析物的浓度CIT-CIMS

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATom: In Situ Data from Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2 简介 Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2是一种用于收集原位数据的质谱仪。…

Llama 3.2 Vision Molmo:多模态开源生态系统基础

编者按&#xff1a; 视觉功能的融入对模型能力和推理方式的影响如何&#xff1f;当我们需要一个既能看懂图像、又能生成文本的 AI 助手时&#xff0c;是否只能依赖于 GPT-4V 这样的闭源解决方案&#xff1f; 我们今天为大家分享的这篇文章&#xff0c;作者的核心观点是&#xf…

Vmos pro-虚拟机 解锁永久vip

[应用名称] 应用名称&#xff1a;Vmos pro [应用版本] 应用版本&#xff1a;2.99 [软件大小] 软件大小&#xff1a;32.2mb [应用简介] 应用简介&#xff1a;Vmos Pro这款安卓虚拟机平台&#xff0c;提供了多样化的ROM版本选择。用户可根据自身需求更换ROM&#xff0c;调…

力扣hot100-->位运算

目录 位运算 1. 136. 只出现一次的数字 2. 338. 比特位计数 3. 461. 汉明距离 位运算 1. 136. 只出现一次的数字 简单 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设…