opencv绘制基本图形,在图片上添加文字

news2024/11/20 13:40:05

文章目录

  • 1.opencv绘制基本图形
    • 1. 画直线, cv2.line( )
    • 2. 画长方形,cv2.rectangle( )
    • 3. 画圆型,cv2.circle( )
    • 4. 画折线,cv2.polylines( )
  • 2.图片上显示文字

本章主要阐述利用opencv绘制一些常见的图形方法和技巧,以及在图形上添加文字。

1.opencv绘制基本图形

定义个颜色字典
#定义颜色
colors={
‘blue’: (255,0,0),
‘green’: (0,255,0),
‘red’ : (0,0,255),
‘yellow’: (0,255,255),
‘magenta’: (255,0,255),
‘cyan’: (255,255,0),
‘white’ : (255,255,255),
‘black’: (0,0,0),
‘gray’: (125,125,125),
‘rand’: np.random.randint(0, high=256,size=(3,)).tolist(),
‘dark gray’: (50,50,50),
‘light gray’: (220,220, 220)
}

#定义显示图像方法,将图像BGR显示顺序调整为RGB
def show_image(image, title):
image_RGB = image[:,:,::-1] # BGR->RGB
plt.title(title)
plt.imshow(image_RGB)
plt.show()

#创建画布
canvas = np.zeros((400,400,3),np.uint8) #默认背景是黑色
show_image(canvas,“image”)
在这里插入图片描述

我们将画布颜色改为白色
#改变画布颜色
canvas[:] = colors[‘white’]
在这里插入图片描述

1. 画直线, cv2.line( )

cv2.line(image, start_point, end_point, color, thickness)
参数:
image: 图像
start_point:它是线的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
end_point: 它是线的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
color: 它是要绘制的线条的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
thickness: 它是线的粗细像素。

返回值:它返回一个图像。

#画直线
cv2.line(canvas,(0,0),(400,400),colors[‘green’],5)
cv2.line(canvas,(0,400),(400,0),colors[‘black’],5)
show_image(canvas,‘cv2.line()’)
在这里插入图片描述

2. 画长方形,cv2.rectangle( )

cv2.rectangle(image, start_point, end_point, color, thickness)
image:它是要在其上绘制矩形的图像。
start_point:它是矩形的起始坐标,长方形框左上角坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
end_point:它是矩形的结束坐标,长方形框右下角坐标。坐标表示为两个值的元组,即(X坐标值ÿ坐标值)。
color:它是要绘制的矩形的边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
thickness:它是矩形边框线的粗细像素。厚度-1像素将以指定的颜色填充矩形形状。

#画长方形
#创建画布
canvas = np.zeros((400,400,3),np.uint8) #默认背景是黑色
#改变画布颜色,将颜色赋值给画布即可
canvas[:] = colors[‘white’]
cv2.rectangle(canvas,(10,20),(70,90),colors[‘green’],3)
cv2.rectangle(canvas,(150,50),(200,300),colors[‘blue’],5)
show_image(canvas,‘cv2.rectangle’)
在这里插入图片描述

3. 画圆型,cv2.circle( )

circle(img, center, radius, color, thickness=None, lineType=None, shift=None):
参数含义:图片,圆心,半径,颜色,圆轮廓粗细,线类型。thickness=-1 :表示对封闭图像进行填满

#画圆
#创建画布
canvas = np.zeros((400,400,3),np.uint8) #默认背景是黑色
#改变画布颜色,将颜色赋值给画布即可
canvas[:] = colors[‘white’]

cv2.circle(canvas,(200,200),50,colors[‘red’],-1)
cv2.circle(canvas,(200,200),150,colors[‘green’],5)
show_image(canvas,‘cv2.circle()’)

在这里插入图片描述

4. 画折线,cv2.polylines( )

polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

参数:
img(array):为ndarray类型(可以为cv.imread)直接读取的数据
pts(array):为所画多边形的顶点坐标,举个简单的例子:当一张图片需要有多个四边形时,该数组ndarray的shape应该为(N,4,2)
isClosed(bool):所画四边形是否闭合,通常为True
color(tuple):BGR三个通道的值
thickness(int):画线的粗细
shift:顶点坐标中小数的位数

#画折线
#创建画布
canvas = np.zeros((400,400,3),np.uint8) #默认背景是黑色
#改变画布颜色,将颜色赋值给画布即可
canvas[:] = colors[‘white’]

#闭合图形
pts = np.array([[250,5],[220,80],[280,80]])
cv2.polylines(canvas,[pts],True,colors[‘green’],3)

#不闭合图形
pts = np.array([[50,120],[20,180],[80,200]])
cv2.polylines(canvas,[pts],False,colors[‘green’],3)
show_image(canvas,‘cv2.polylines’)
在这里插入图片描述

2.图片上显示文字

在图片上添加文字主要运用cv2.putText()这个api

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

上述参数分别表示:
img:需要绘制文本的图像;
text:要绘制的文本内容;
org:表示要绘制的位置,图像中文本字符串的左下角;可以用一个元祖来表示x、y坐标,例如(10, 100)表示x=10,y=100。
fontFace:字体类型,如cv2.FONT_HERSHEY_SIMPLEX、cv2.FONT_HERSHEY_PLAIN等;对应的字体类型如下:
cv2.FONT_ITALIC:斜体字的标志
cv2.FONT_HERSHEY_PLAIN:小尺寸无衬线字体
cv2.FONT_HERSHEY_SIMPLEX:正常大小的无衬线字体
cv2.FONT_HERSHEY_DUPLEX:正常大小的无衬线字体(比FONT_HERSHEY_SIMPLEX更复杂)
cv2.FONT_HERSHEY_COMPLEX:正常大小的衬线字体
cv2.FONT_HERSHEY_TRIPLEX:正常大小的衬线字体(比FONT_HERSHEY_COMPLEX更复杂)
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写体字体
cv2.FONT_HERSHEY_SCRIPT_COMPLEX(比FONT_HERSHEY_SCRIPT_SIMPLEX的更复杂)

fontScale:字体的大小,字体比例因子乘以font-specific基本大小;
color:文本字体颜色,设置三通道的元组BGR,比如(255,0,0)
常见颜色:
red (0, 0, 255)
green (0, 128, 0)
blue (255, 0, 0)
yellow (0, 255, 255)
purple (128, 0, 128)
orange (0, 165, 255)
white (255, 255, 255)
black (0, 0, 0)
gray (128, 128, 128)

thickness:字体粗细,默认为1;
lineType:线条类型,默认为cv2.LINE_AA,也是显示最清晰的; 常用的线条类型有:cv2.LINE_4(4连通线条), cv2.LINE_8(8连通线条), cv2.LINE_AA(抗锯齿线条)
bottomLeftOrigin:坐标原点,如果为真,则图像数据原点位于左下角,否则它在左上角;
其中,org定义了文本起始位置,可以用一个元祖来表示x、y坐标,例如(10, 100)表示x=10,y=100。

#创建画布
canvas = np.zeros((400,400,3),np.uint8) #默认背景是黑色
#改变画布颜色,将颜色赋值给画布即可
#canvas[:] = colors[‘white’]
canvas.fill(255)

#往画布上显示文本
cv2.putText(canvas,‘Hello,world’,(80,100),cv2.FONT_HERSHEY_SIMPLEX,1.7,colors[‘green’],1)
cv2.putText(canvas,‘Welcome’,(180,190),cv2.FONT_HERSHEY_SIMPLEX,0.7,colors[‘red’],2)
cv2.putText(canvas,‘See you’,(120,290),cv2.FONT_HERSHEY_SIMPLEX,2,colors[‘red’],3)
show_image(canvas,‘Canvas’)

在这里插入图片描述

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

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

相关文章

2024年贵州省事业单位考试下周一开始报名,千万不要错过报名时间

2024年贵州省事业单位考试公告已出!快看看你能不能报名! 1、报名时间安排 (一)网上报名 2024年2月26日-2024年2月28日 (二)网上资格初审 2024年2月26日-2024年2月29日 (三)网上缴费 2024年2月26日-2024年3月1日 2、笔试安排 2024年3月30日 08:30-10:…

HDL FPGA 学习 - FPGA基本要素,开发流程,Verilog语法和规范、编写技巧

目录 Altera FPGA 基本要素 FPGA 开发流程和适用范围 设计和实施规范 顶层设计的要点 Verilog HDL 语法规范 编写规范 设计技巧 编辑整理 by Staok,始于 2021.2 且无终稿。转载请注明作者及出处。整理不易,请多支持。 本文件是“瞰百易”计划的…

如何正确设置CrossOver之偏好设置 crossover软件使用 crossover设定 crossover软件安装

CrossOver的核心是Wine,Wine是一个能在多种POSIX-compliant操作系统(如:Linux、Mac OS等)上运行Windows应用的兼容层。Wine不是Windows的模拟工具,它是把Windows API 调用翻译成为动态的 POSIX 调用,实现Li…

东方博宜 1086. 姐妹数对

东方博宜 1086. 姐妹数对 思路&#xff1a;先按照题意把规律找出来&#xff0c;按照规律再写程序。 #include<iostream> using namespace std; int main() {int n ;cin >> n ;int sum 0 ;for(int i 1 ; i < n ; i){for(int j i1 ; j < n ; j){int m ;m …

Linux配置jdk、tomcat、mysql离线安装与启动

目录 1.jdk安装 2.tomcat的安装&#xff08;开机自启动&#xff09; 3.MySQL的安装 4.连接项目 1.jdk安装 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 解压安装包 这里需要解压到usr/local目录下&#xff0c;在这里我新建一个文件夹…

Git的基本操作和原理

目录 写在前面的话 为什么要有Git&#xff08;git初识&#xff09;&#xff1f; Git安装(Centos为例) Git基本操作 创建Git本地仓库 Git配置 认识工作区、暂存区、版本库 概念认识 添加文件 查看.git文件 修改文件 版本回退 撤销修改 情况一&#xff1a;…

【办公类-22-06】周计划系列(1)“信息窗” (2024年调整版本)

作品展示 调用原来的信息窗素材&#xff0c;制作下学期的19周的信息窗基础word 背景需求&#xff1a; 开学了&#xff0c;继续做周计划系列&#xff0c;在原有基础上&#xff0c;进行进一步代码优化 【办公类-22-01】周计划系列&#xff08;1&#xff09;-生成“信息窗”&am…

供应链大数据:穿越经济迷雾的指南针

随着经济形势的变幻莫测&#xff0c;企业运营面临着前所未有的挑战。在这个充满不确定性的时代&#xff0c;供应链大数据如同一盏明亮的指南针&#xff0c;为企业提供精准的方向指引。下面&#xff0c;我们将深入探讨供应链大数据如何帮助企业洞察市场趋势、优化库存管理、降低…

K线实战分析系列之八:十字星——容易识别的特殊形态

K线实战分析系列之八&#xff1a;十字星——容易识别的特殊形态 一、十字启明星和十字黄昏星二、弃婴底部形态和弃婴顶部形态三、总结十字启明星和十字黄昏星形态的要点 一、十字启明星和十字黄昏星 当开盘价与收盘价极为接近的时候&#xff0c;当期的K线就呈现为一根十字线&am…

PyPDF2:项目实战源码分享(PDF裁剪)

目录&#x1f4d1; 1. 背景&#x1f4d1;2. 源码模块解析&#x1f4d1;2.1 读取PDF页数2.2 获取指定页的宽高尺寸2.3 裁剪单页PDF2.4 批量裁剪PDF 总结&#x1f4d1; 1. 背景&#x1f4d1; 接PyPDF2模块推荐博文中提到的实际需求&#xff08;将银行网站下载来的多页且单页多张…

设计模式--单例模式--懒汉饿汉

单例模式 单例模式(Singleton)&#xff0c;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 单例模式 通常我们可以让一个全局变量使得一个对象被访问&#xff0c;但它不能防止你实例化多个对象。一个最好的办法就是&#xff0c;让类自身负责保存它的唯一实…

[嵌入式系统-34]:RT-Thread -19- 新手指南:RT-Thread标准版系统架构

目录 一、RT-Thread 简介 二、RT-Thread 概述 三、许可协议 四、RT-Thread 的架构 4.1 内核层&#xff1a; 4.2 组件与服务层&#xff1a; 4.3 RT-Thread 软件包&#xff1a; 一、RT-Thread 简介 作为一名 RTOS 的初学者&#xff0c;也许你对 RT-Thread 还比较陌生。然…

vue-element-admin如何绕开系统的请求的路由,使用静态路由

我开发时候遇到一个这样的问题&#xff0c;服务端权限管理部分还没搞好&#xff0c;所以但是需要将所有菜单列出来 我做了以下的修改 首先是建一个文件存放后期需要动态生成的路由 引入到常量路由中 另外在permissions当中

FPGA之16:1复选器

每个slice 都有一个F8MUX。F8MUX原语&#xff1a; MUXF8 MUXF8_inst&#xff08; .0&#xff08;0&#xff09;&#xff0c;Il Output of MUX to general routing .I0&#xff08;10&#xff09;&#xff0c;//Input&#xff08;tie to MUXF7L/LO out&#xff09; .I1&#xf…

This dependency was not found解决方法

问题如上(前端代码)&#xff0c;我是引用js文件出的问题&#xff0c;无法找到api/userManage模块。 解决&#xff1a;没感觉哪有问题&#xff0c;把后面加了个/&#xff0c;就解决了&#xff0c;代表src目录&#xff0c;应该是目录和目录之间应该有/作为分割&#xff1a;

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 &#xff0c;不然永远存在&#xff0c;关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…

C++ //练习 8.4 编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。

C Primer&#xff08;第5版&#xff09; 练习 8.4 练习 8.4 编写函数&#xff0c;以读模式打开一个文件&#xff0c;将其内容读入到一个string的vector中&#xff0c;将每一行作为一个独立的元素存于vector中。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09…

【Java程序设计】【C00314】基于Springboot的足球俱乐部管理系统(有论文)

基于Springboot的足球俱乐部管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的足球俱乐部管理系统的设计与实现&#xff0c;本系统有管理员以及用户二种角色权限 管理员权限操作的功能包括管理公告&#x…

C语言实现简单选择排序

简单选择排序 简单选择排序的平均复杂度为 O(n2),但效率通常比相同平均复杂度的直接插入排序还要差。但由于选择排序是 内部排序&#xff0c;因此在内存严格受限的情况下还是可以用的。选择排序的原理很简单&#xff0c;如下图所示&#xff1a;持续从未处理元素中找到最小值并加…

使用命令行创建文件夹和文件

创建文件夹 md 文件夹名字 创建文件 echo >文件名字.后缀然后回车即可 注意点:echo >文件名字.后缀 的 >后面不可以加空格&#xff0c;不然会报错\