树莓派应用--AI项目实战篇来啦-5.OpenCV绘画函数的使用

1. 介绍

        OpenCV作为一款功能强大的计算机视觉库,被广泛地应用于图像处理和计算机视觉领域。
除了在机器视觉和人工智能领域有者广泛的应用,OpenCV 还能够媲美艺术家的创造力,通过其强大的绘图函数,绘制出令人叹为观止的艺术画作。
        OpenCV中的绘图函数为我们提供了丰富多样的工具,能够绘制出各种形状和效果。例如,我们可以使用线条函数画出细腻的轮廓,使用填充函数给图像增添色彩和渐变效果,使用文本函数添加文字说明等等。这些绘图函数结合起来,让我们能够在图像中创造出各种想象力丰富的人物形象。
        除了线条和填充函数,OpenCV 还提供了文本函数,可以方便地在图像中添加文字说明或者签名。我们可以选择合适的字体、大小和位置, 我们的艺术画作增添独特的个性和风格。
        OpenCV 提供了丰富多样的绘图函数,赋予了我们绘制令人叹为观止的艺术画作的能力。通过灵活运用这些函数,我们可以创造出多样化、创新化的艺术形象。当然,艺术创作需要艺术家自身的创造力和个性的体现,OpenCV 只是辅助工具之一。无论如何,OpenCV 为我们打造艺术画作提供了更为便捷和丰富的方式和可能性,这也是现代科技给艺术创作带来的一大进步。

2. 操作步骤

1)画线

        要画一条线,只需要告诉函数这条线的起点和终点。即可画一条从左上方到右下角的线段。

cv2.line(image,starting cordinates, ending cordinates, color, thickness)
# 载入库
import cv2
import numpy as np
from matplotlib import pyplot as plt# 画一条5像素的对角蓝线
image = np.zeros((512,512,3), np.uint8)
#cv2.line(image, (startposition), (endposition), (Farbe der Linie), Linienbreite)
cv2.line(image, (0,0), (511,511), (255,127,0), 5)
cv2.line(image, (511,0), (0,511), (255,127,0), 5)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image),plt.title('Blue Line')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

2) 画矩形

        要画一个矩形,需要告诉函数的左上角顶点和右下角顶点的坐标。

# 绘制一个矩形
image = np.zeros((512,512,3), np.uint8)
# eine negative Linienbreite füllt das viereck aus
cv2.rectangle(image, (100,100), (300,250), (127,50,127), -1)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image),plt.title('Rectangle')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

3) 画圆

       要面圆的话,只需要指定圆形的中心点坐标和半径大小。

cv2.cirlce(image, center, radius, color, fill)
image = np.zeros((512,512,3), np.uint8)
#cv2.circle(image, (Zentrum), Radius, (15,75,50), -1) 
cv2.circle(image, (350, 350), 100, (15,75,50), 10) 
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image),plt.title('Circle')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

4) 画椭圆

        画椭圆比较复杂,我们要多输入几个参数。

        一个参数是中心点的位置坐标。另一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演顺时针方向起始的角度和结束角度,如果是0和360,就是整个椭圆。查看cv2.ellipse()可以得到更多信息。

image = np.zeros((512,512,3), np.uint8)
cv2.ellipse(image,(256,256),(100,50),0,0,180,255,-1)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image),plt.title('ellipse')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

5) 画多边形

        画多边形,需要指定每个顶点的坐标。用这些点的坐标构建一个大小等于行数X1,X2的数组,行数就是点的数目。这个数组的数据类型必须为int32。

image = np.zeros((512,512,3), np.uint8)# 让我们定义四个点
pts = np.array( [[10,50], [400,50], [90,200], [50,500]], np.int32)print(pts.shape)
# 现在让我们定义折线
pts = pts.reshape((-1,1,2))
print(pts.shape)cv2.polylines(image, [pts], True, (0,0,255), 3)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image),plt.title('Polygon')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

6)在图片上添加文字

        要在图片上绘制文字,需要设置下列参数:
        •要绘制的文字
        •你要绘制的位置
        •字体类型(通过查看cv2.putText()的文档找到支持的字体)
        • 字体的大小
        •文字的一般属性如颜色,粗细,线条的类型等。
        为了更好看一点推荐使用 linetype=cv2. LINE_AA。

image = np.zeros((512,512,3), np.uint8)cv2.putText(image, 'Hello World!', (75,290), cv2.FONT_HERSHEY_COMPLEX, 2, (100,170,0), 3)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image),plt.title('Hello World!')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

子组件向父组件传值$emit

点击子组件的按钮&#xff0c;将子组件的值传递给父组件&#xff0c;并进行提示。 子组件 <template><div><button click"emitIndex">clickme</button></div> </template> <script> export default {methods: {emitInde…

petalinux 自动登陆 自动启动程序

PetaLinux 自动登陆 (1) cd 到项目工程目录下&#xff1b; (2) 运行命令&#xff1a;petalinux-config -c rootfs (3) 依次选择 Image Features -> serial-autologin-root 保存退出 创建APP petalinux-create apps --template install --name init-app --enable编辑文件 …

轧钢测径仪安装前要做哪些准备工作?

轧钢测径仪是用于检测线材、棒材、管材的外径、椭圆度尺寸&#xff0c;螺纹钢的内径、横肋、纵肋尺寸的精密仪器&#xff0c;它是在线检测设备&#xff0c;被按照在环境复杂的轧制现场&#xff0c;为了保证测径仪的顺利安装&#xff0c;必要的前期准备工作要做好。 现场勘查&…

QT元对象系统特性详细介绍(信号槽、类型信息、动态设置属性)(注释)

目 录 一、元对象系统简介 二、信号和槽 三、类型信息 四、动态设置属性 一、元对象系统简介 QT中的元对象系统Q_OBJECT并不是C标准代码&#xff0c;因此在使用时需要QT的MOC&#xff08;元对象编译器&#xff09;进行预处理&#xff0c;MOC会在编译时期读取C代码中的特定…

【华为】配置BGP协议

边界网关协议BGP是一种实现自治系统AS之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。BGP在不同自治系统之间进行路由转发&#xff0c;分为EBGP&#xff08;外部边界网关协议&#xff09;和IBGP&#xff08;内部边界网关协议&#xff09;两种情况。 [A]in g0/0/…

自动泊车变自动撞车?高速连接器如何助力智驾安全

当ADAS成为人们行车过程中的常伴辅助&#xff0c;颠覆人类驾驶方式的无人驾驶何时才能到来&#xff1f; 今年上半年&#xff0c;搭载了L2级辅助驾驶功能的新能源汽车渗透率达到了66.4%。自动驾驶领赛道作为新能源汽车智能化竞演中的“嫡赛道”&#xff0c;有股要席卷整个市场的…

执行vue create XXX报错The operation was rejected by your operating system

创建项目&#xff1a; vue create my-project 报错&#xff1a; npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\node_cache\_cacache\tmp\5d2a6f8e npm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, open D:\Pro…

macOS Sequoia 15.0.1

macOS Sequoia 推出了一系列新功能&#xff0c;可助你在 Mac 上提高生产力和创造力。通过最新连续互通功能 iPhone 镜像&#xff0c;你可以在 Mac 上访问整个 iPhone。轻松平铺窗口快速打造理想工作空间&#xff0c;还可查看通过演讲者前置演示时即将共享的内容。经过重大更新的…

到底大模型有什么用呢?一文了解什么是大模型?

大模型是指具有大规模参数和复杂计算结构的机器学习模型。本文从大模型的基本概念出发&#xff0c;对大模型领域容易混淆的相关概念进行区分&#xff0c;并就大模型的发展历程、特点和分类、泛化与微调进行了详细解读&#xff0c;供大家在了解大模型基本知识的过程中起到一定参…

探索 Python 装饰器的新境界:wrapt 库的神秘力量

文章目录 探索 Python 装饰器的新境界&#xff1a;wrapt 库的神秘力量背景&#xff1a;为何选择 wrapt&#xff1f;wrapt 是什么&#xff1f;如何安装 wrapt&#xff1f;简单的 wrapt 库函数使用方法创建简单装饰器保持元信息处理参数传递 场景应用&#xff1a;wrapt 的实际用例…

闭着眼学机器学习——决策树分类

引言&#xff1a; 在正文开始之前&#xff0c;首先给大家介绍一个不错的人工智能学习教程&#xff1a;https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程&#xff0c;感兴趣的读者可以自行查阅。 1. 算法介绍 决策树是一种常用的机器学习算法…

详解Java之lambda

目录 lambda 引入 语法 函数式接口 lambda表达式的使用 语法精简&#xff1a; 代码示例&#xff1a; 变量捕获 局部变量捕获 成员变量捕获 lambda在集合中的使用 lambda的优缺点 lambda 引入 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表…

基于SSM的日常饮食健康推荐系统开发

文未可获取一份本项目的java源码和数据库参考。 课题的研究目的和意义 随着互联网的普及与通信技术的发展&#xff0c;现今人们可以通过各种方式在任何时间与地点访问网络&#xff0c;生活之中很多事情可以通过网络足不出户便可实现&#xff0c;例如通过网络购物、缴纳水电费…

短链接在线工具免费的哪个好?

目前市面上的很多短链接都不能用了&#xff0c;这类工具虽然技术含量不算高&#xff0c;但是需要长时间的持续维护&#xff0c;很多个人开发者的平台就坚持不下去了&#xff0c;愿意继续的&#xff0c;基本都是收费了。 所以&#xff0c;今天向大家推荐几款目前市面上很好用的…

五、UI弹窗提示

一、制作弹窗UI 二、创建脚本 1、继承WindowRoot&#xff08;UI基类&#xff09; 获取UI上面的组件 2、初始化 将这个文本失活 3、写一个提示出现的方法 这个派生类中&#xff0c;继承了基类的两个方法&#xff0c;设置显示和设置文本 对应基类的这两个方法 将动画赋值给动…

基于django的代理商订单管理系统

基于Django的代理商订单管理系统——高效助力代理商管理 在如今企业业务日益复杂的环境下&#xff0c;如何高效地管理代理商订单成为不可或缺的环节。我们推出了一款基于Django框架的代理商订单管理系统&#xff0c;专为企业的订单管理及返利控制设计&#xff0c;为企业与代理…

Jenkins pipeline语法笔记

Jenkins pipeline 简介Jenkins Pipeline 优势DSL 是什么 pipeline支持两种语法&#xff1a;声明式pipeline语法&#xff1a;Pipelineagent Pipeline 声明式语法DeclarativeenvironmentoptionsparameterstriggerstoolsinputwhenParallel Pipeline Scripted语法创建一个简单的 Pi…

ArrayList和顺序表(上)

1. ArrayList的介绍 在介绍ArrayList之前,我们需要认识一下线性表和顺序表 线性表: 是n个具有相同特性的数据元素的有限序列.常见的线性表:顺序表,链表,栈,队列... 线性表在逻辑上是线性结构,也就是一条连续的直线.但是在物理结构上不一定是连续的,线性表在物理上存储的时候,常…

降噪效果好的头戴式耳机有哪些?四大值得入手的百元降噪耳机盘点

在嘈杂的现代生活中&#xff0c;寻找一片属于自己的宁静空间已成为许多人的追求&#xff0c;头戴式降噪耳机凭借其出色的隔音效果和舒适的佩戴体验&#xff0c;成为了众多消费者的首选&#xff0c; 在通勤路上的喧嚣&#xff0c;还是办公室内的嘈杂&#xff0c;降噪效果好的头…

jmeter在beanshell中使用props.put()方法的注意事项

在jmeter中&#xff0c;通常使用beanshell去处理一些属性的设置和获取的操作&#xff0c;而这些操作也是有一定的规则的。 1. 设置属性时&#xff0c;在属性名上要加双引号&#xff0c;这代表它不是一个需要用var去声明的变量 这种设置属性的方式才是有效可行的&#xff0c;在…