OpenCV基础知识4 — 绘制图形

news2024/9/24 1:18:35

前言:Hello大家好,我是小哥谈。Opencv提供了许多用于绘制图形的方法,包括绘制线段的line()方法、绘制矩形的retangle()方法、绘制圆形的circle()方法、绘制多边形的polylines()方法和绘制文字的putText()方法。本节课将依次对上述各个方法进行讲解,并使用上述方法绘制相应的图形。 🌈

 前期回顾:

          OpenCV基础知识1— OpenCV概述

          OpenCV基础知识2 — 图像处理的基本操作

          OpenCV基础知识3 — 图像数字化基础(像素、色彩空间)   

           目录

 🚀1.线段的绘制 

 🚀2.矩形的绘制

 🚀3.圆形的绘制

 🚀4.多边形的绘制

 🚀5.文字的绘制

 🚀1.线段的绘制 

Opencv提供了用于绘制线段的line()方法,使用这个方法即可绘制长短不一的、粗细各异的、五颜六色的线段。🌱

line()方法语法格式如下:

img = cv2.line(img,pt1,pt2,color,thickness)

参数说明:

img:画布

pt1:线段的起点坐标

pt2:线段的终点坐标

color:绘制线段时的线条颜色

thickness:绘制线段的线条宽度

说明:♨️♨️♨️

当线条颜色是红色的时候,由于Opencv默认的通道顺序是B-G-R,因此将使用(0,0,255)表示红色。

Python代码:

import numpy as np  # 导入Python中的numpy模块
import cv2

# np.zeros():创建了一个画布
# (300, 300, 3):一个300 x 300,具有3个颜色空间(即Red、Green和Blue)的画布
# np.uint8:OpenCV中的灰度图像和RGB图像都是以uint8存储的,因此这里的类型也是uint8
canvas = np.zeros((300, 300, 3), np.uint8)
# 在画布上,绘制一条起点坐标为(50, 150)、终点坐标为(250, 150),绿色的,线条宽度为10的线段
canvas = cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 10)
# 在画布上,绘制一条起点坐标为(50, 250)、终点坐标为(250, 250),红色的,线条宽度为15的线段
canvas = cv2.line(canvas, (50, 250), (250, 250), (0, 0, 255), 15)
# 在画布上,绘制一条起点坐标为(150, 50)、终点坐标为(150, 250),黄色的,线条宽度为20的线段
canvas = cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 20)
cv2.imshow("Lines", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:


 🚀2.矩形的绘制

OpenCV提供了用于绘制矩形的retangle()方法,使用这个方法既可以绘制矩形,也可以绘制实心矩形。🌷

retangle()方法的语法格式如下所示:

img = cv2.retangle(img,pt1,pt2,color,thickness)

参数说明:

img:画布

pt1:矩形的左上角坐标

pt2:矩形的右下角坐标

color:绘制矩形时的线条颜色

thickness:绘制矩形时的线条宽度

Python代码:

import numpy as np # 导入Python中的numpy模块
import cv2

# np.zeros():创建了一个画布
# (300, 300, 3):一个300 x 300,具有3个颜色空间(即Red、Green和Blue)的画布
# np.uint8:OpenCV中的灰度图像和RGB图像都是以uint8存储的,因此这里的类型也是uint8
canvas = np.zeros((300, 300, 3), np.uint8)
# 在画布上绘制一个左上角坐标为(50,50),右下角坐标为(200,150)红色的宽度为6的矩形边框
canvas = cv2.rectangle(canvas, (50, 50), (200, 150), (0,0, 255),6)
cv2.imshow("Rectangle", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:


 🚀3.圆形的绘制

OpenCV提供了用于绘制圆形的circle()方法,这个方法与retangle()方法的功能相同,既可以绘制圆形边框,也可以绘制实心圆形。🍁

circle()方法的语法格式如下:

img = cv2.circle(img,center,radius,color,thickness)

参数说明:

img:画布

center:圆形的圆心坐标

radius:圆形的半径

color:绘制圆形时的线条颜色

thickness:绘制圆形时的线条宽度

Python代码:

import numpy as np # 导入Python中的numpy模块
import cv2

# np.zeros():创建了一个画布
# (100, 300, 3):一个100 x 300,具有3个颜色空间(即Red、Green和Blue)的画布
# np.uint8:OpenCV中的灰度图像和RGB图像都是以uint8存储的,因此这里的类型也是uint8
canvas = np.zeros((100, 300, 3), np.uint8)
# 在画布上,绘制一个圆心坐标为(50, 50),半径为40,红色的实心圆形
canvas = cv2.circle(canvas, (50, 50), 40, (0, 0, 255), -1)
# 在画布上,绘制一个圆心坐标为(150, 50),半径为40,黄色的实心圆形
canvas = cv2.circle(canvas, (150, 50), 40, (0, 255, 255), -1)
# 在画布上,绘制一个圆心坐标为(250, 50),半径为40,绿色的实心圆形
canvas = cv2.circle(canvas, (250, 50), 40, (0, 255, 0), -1)
cv2.imshow("TrafficLights", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

 运行结果:


 🚀4.多边形的绘制

OpenCV提供了用于绘制多边形的polylines()方法,使用这个方法绘制的多边形既可以是封闭的,也可以是不封闭的。🌸

polylines()方法的语法格式如下:

img = cv2.polylines(img,pts,isClosed,color,thickness)

参数说明:

img:画布

pts:由多边形各个顶点的坐标组成的一个列表,这个列表是一个Numpy的数组类型。

isClosed:如果值为True,表示一个闭合的多边形;如果值为False,表示一个不闭合的多边形。

color:绘制多边形时的线条颜色

thickness:绘制多边形时的线条宽度

Python代码:

import numpy as np # 导入Python中的numpy模块
import cv2

# np.zeros():创建了一个画布
# (300, 300, 3):一个300 x 300,具有3个颜色空间(即Red、Green和Blue)的画布
# np.uint8:OpenCV中的灰度图像和RGB图像都是以uint8存储的,因此这里的类型也是uint8
canvas = np.zeros((300, 300, 3), np.uint8)
# 按顺时针给出等腰梯形4个顶点的坐标
# 这4个顶点的坐标构成了一个大小等于“顶点个数 * 1 * 2”的数组
# 这个数组的数据类型为np.int32
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32)
# 在画布上根据4个顶点的坐标,绘制一个闭合的,红色的,线条宽度为5的等腰梯形边框
canvas = cv2.polylines(canvas, [pts], True, (0, 0, 255), 5)
cv2.imshow("Polylines", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:


 🚀5.文字的绘制

OpenCV提供了用于绘制文字的putText()方法,使用这个方法不仅能够设置字体的样式、大小和颜色,而且能够使字体呈现斜体的效果,还能够控制文字的方向,进而使文字呈现垂直镜像的效果。🎋

putText()方法的语法格式如下:

img = cv2.putText(img,text,org,fontFace,fontScale,color,thickness,lineType,bottomLeftOrigin)

参数说明:

img:画布

text:要绘制的文字内容

org:文字在画布中的左下角坐标

fontFace:字体样式

fontScale:字体大小

color:绘制文字时的线条颜色

thickness:绘制文字时的线条宽度

lineType:线型(指的是线的产生算法,有4和8两个值,默认值为8)

bottomLeftOrigin:绘制文字时的方向(有True和False两个值,默认值为False)

Python代码:

import numpy as np # 导入Python中的numpy模块
import cv2

# np.zeros():创建了一个画布
# (100, 300, 3):一个100 x 300,具有3个颜色空间(即Red、Green和Blue)的画布
# np.uint8:OpenCV中的灰度图像和RGB图像都是以uint8存储的,因此这里的类型也是uint8
canvas = np.zeros((100, 300, 3), np.uint8)
# 在画布上绘制文字“mrsoft”,文字左下角的坐标为(20, 70)
# 字体样式为FONT_HERSHEY_TRIPLEX
# 字体大小为2,线条颜色是绿色,线条宽度为5
cv2.putText(canvas, "OpenCV", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)
cv2.imshow("Text", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JPCS出版】第五届能源、电力与电网国际学术会议(ICEPG 2023)

第五届能源、电力与电网国际学术会议(ICEPG 2023) 2023 5th International Conference on Energy, Power and Grid 最近几年,不少代表委员把目光投向能源电力领域,对促进新能源发电产业健康发展、电力绿色低碳发展,提…

【动态内存管理助力程序优化与性能飞升】

本章重点 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 几个经典的笔试题 柔性数组 1. 为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈…

R语言中的函数24:Combinat:combn(), permn()

介绍 combinat中的combn()和permn()函数可以得到所有的排列组合的情况 combn()函数 combn(x, m, funNULL, simplifyTRUE, …)x – 组合的向量源m – 要取的元素的数量fun – 应用于每个组合的函数(可能为空)simplify – 逻辑的,如果是FALSE,返回一个列…

计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战,我们都知道计算机视觉是一门研究如何使计算机能够理解和解释数字图像或视频的技术和方法。在计算机视觉领域中,数据集是非常重要的资源,它们可以用于训练和评估…

C++(Qt)软件调试---将调试工具安装到AeDebug(11)

C(Qt)软件调试—将调试工具安装到AeDebug(11) 文章目录 C(Qt)软件调试---将调试工具安装到AeDebug(11)1、前言1.1 使用的调试工具 2、调试器安装1.1 WinDbg1.2 procdump1.3 DrMinGW1.4 vsjitdebugger 更多精彩内容👉个…

C++学习| VS配置FFTW3以及一维傅里叶变换的使用

前言:最近要用C对信号进行一维傅里叶变换,但是对傅里叶变换的内容有些遗忘了,同时自己对FFTW使用也不太了解,所以写下此篇方便以后回顾。 VS项目配置FFTW3 FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散…

STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

今日继续学习使用 STM32 F103C8T6开发板 点亮一个LED灯,文章提供源码,测试工程,实验效果图,希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 : 引脚安排整理: 定时器的引脚例举: …

openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句

文章目录 openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句35.1 语法格式35.2 参数说明35.3 示例 openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句 修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所…

npm 报错 cb() never called!

不知道有没有跟我一样的情况,在使用npm i的时候一直报错:cb() never called! 换了很多个node版本,还是不行,无法解决这个问题 百度也只是让降低node版本请缓存,gpt给出的解决方案也是同样的 但是缓存清过很多次了&a…

Vue自定义指令使用

本篇文章讲述使用Vue自定义指令,并在项目中完成相应功能。 在平常Vue脚手架项目中,使用到 自定义指令较少,一般都是使用的自带指令,比如 v-show 、v-if 、 v-for 、 v-bind 之类的。这些已经能够满足大多数项目使用。更多的可能也…

2462. 雇佣 K 位工人的总代价;948. 令牌放置;1262. 可被三整除的最大和

2462. 雇佣 K 位工人的总代价 核心思想&#xff1a;分情况讨论&#xff0c;当2*candidates > n 时&#xff0c;直接取前k个工人即可&#xff1b;当2*candidates< n时&#xff0c;我们可以维护两个最小堆&#xff0c;然后不断比较堆中的值&#xff0c;然后用i,j两个指针表…

Java项目练习--上

任务一&#xff1a;创建一个简单的银行程序包 目的&#xff1a;Java语言中面向对象的封装及构造器的创建与使用 说明&#xff1a;创建Account类&#xff0c;将源文件放入banking程序包中。在创建单个账户的默认程序包中&#xff0c;已经编写了测试程序TestBanking,这个测试程…

list模拟实现【引入反向迭代器】

文章目录 1.适配器1.1传统意义上的适配器1.2语言里的适配器1.3理解 2.list模拟实现【注意看反向迭代器】2.1 list_frame.h2.2riterator.h2.3list.h2.4 vector.h2.5test.cpp 3.反向迭代器的应用1.使用要求2.迭代器的分类 1.适配器 1.1传统意义上的适配器 1.2语言里的适配器 容…

nginx负载均衡(反向代理)

nginx负载均衡 负载均衡&#xff1a;由反向代理来实现。 nginx的七层代理和四层代理&#xff1a; 七层是最常用的反向代理方式&#xff0c;只能配置在nginx配置文件的http模块当中&#xff0c;而且配置方法名称&#xff1a;upstream模块&#xff0c;不能写在server模块中&#…

人工智能行业岗位一览

人工智能行业的岗位薪资高、待遇好、涨薪快已经是公开的事实&#xff0c;那么在人工智能行业中具体有哪些职业岗位呢&#xff1f;对于普通人来说&#xff0c;想要入行人工智能又有哪些机会呢&#xff1f; 下面是人工智能领域中的一部分职业岗位&#xff0c;随着技术的不断发展&…

【计算机视觉|生成对抗】生成对抗网络(GAN)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Generative Adversarial Nets 链接&#xff1a;Generative Adversarial Nets (nips.cc) 摘要 我们提出了一个通过**对抗&#xff08;adversarial&#xff09;**过程估计生成模型的新框架…

基于springboot线上礼品商城

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

详细介绍渗透测试与漏洞扫描

一、概念 渗透测试&#xff1a; 渗透测试并没有一个标准的定义&#xff0c;国外一些安全组织达成共识的通用说法&#xff1b;通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动的主动分析…

STM32基于CubeIDE和HAL库 基础入门学习笔记:功能驱动与应用

文章目录&#xff1a; 一&#xff1a;LED与按键驱动程序 main.c 1.闪灯 led.h led.c 2.按键控制LED亮灭 key.h key.c 二&#xff1a;蜂鸣器与继电器驱动程序 main.c 1.蜂鸣器 buzzer.h buzzer.c delay.h delay.c 2.继电器 relay.h relay.c 三&#xff1…

STM32定时器级联功能

参考&#xff1a;官方文档《stm32f4xx参考手册.pdf》 级联功能&#xff0c;可以把两个定时器的功能关联起来&#xff0c;具体有以下几种&#xff1a; 本文只讲其中一个功能&#xff0c;定时器1给定时器2当分频器。这种功能可以把两个32位定时器&#xff0c;合并为为一个64位定…