【OpenCV学习笔记04】- 绘图功能

这是对于 OpenCV 官方文档的 GUI 功能的学习笔记。学习笔记中会记录官方给出的例子,也会给出自己根据官方的例子完成的更改代码,同样彩蛋的实现也会结合多个知识点一起实现一些小功能,来帮助我们对学会的知识点进行结合应用。
如果有喜欢我笔记的请麻烦帮我关注、点赞、评论。谢谢诸位。

学习笔记:
学习笔记目录里面会收录我关于OpenCV系列学习笔记博文,大家如果有什么不懂的可以通过阅读我的学习笔记进行学习。
【OpenCV学习笔记】- 学习笔记目录

内容

  • 用 OpenCV 画不同的几何图形
  • 学习这些函数:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText() 等。

函数常用传参

在上述所有功能中,您将看到一些常见的参数,如下所示:

  • img:您要绘制形状的图像对象;
  • color:形状的颜色,如 BGR,它是一个元组,例如:蓝色(255,0,0)。对于灰度图,只需传一个标量值。
  • thickness:线或圆等的粗细。如果对闭合图形(如圆)传递-1 ,它将填充形状。默认thickness= 1。
    lineType:线条类型,如 8 连接,抗锯齿线等。默认情况下,它是 8 连接。cv.LINE_AA 画出抗锯齿线,非常好看的曲线。

画线

去画一条线,你需要传递线条的开始和结束的坐标。我们将创建一个黑色图像,并在左上角到右下角画一条蓝色的线。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 画一条 5px 宽的蓝色对角线
cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

cv.imshow("线条", img)
cv.waitKey(0)
cv.destroyWindow("线条")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画矩形

画一个矩形,你需要矩形的左上角和右下角。这次我们将会在图像的右上角画一个绿色的矩形。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 画矩形
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
cv.imshow("矩形", img)
cv.waitKey(0)
cv.destroyWindow("矩形")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画实心圆

画一个圆,你需要它的圆心和半径。我们将在上面绘制的矩形上画一个内圆。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 画矩形
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

# 画圆
cv.circle(img, (447, 63), 63, (0, 0, 255), -1)
cv.imshow("画圆", img)
cv.waitKey(0)
cv.destroyWindow("画圆")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画圆的边

画一个圆,你需要它的圆心和半径。我们将在上面绘制的矩形上画一个圆的边。主要是改变cv.circle的thickness参数。上面用的实心圆用的是-1,这里我们改成3。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

# 画圆
cv.circle(img, (447, 63), 63, (0, 0, 255), 3)
cv.imshow("画圆", img)
cv.waitKey(0)
cv.destroyWindow("画圆")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

画椭圆

画一个椭圆,你需要传好几个参数。一个参数是圆心位置 (x,y)。下个参数是轴的长度 (长轴长度,短轴长度)。角度是椭圆在你逆时针方向的旋转角度。startAngle 和 endAngle 表示从长轴顺时针方向测量的椭圆弧的起点和终点。如整圆就传 0 和 360。更多细节请看 cv.ellipse() 的文档。下面是在这个图像中间画的一个半椭圆例子。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)

# 画椭圆
# 只能画出椭圆一半,也就是圆转椭圆只计算了一半的角度
# 效果见,图1
# cv.ellipse(img, (256, 256), (100, 50), 0, 0, 180, 255, -1)
# 画出椭圆需要计算360角度
# 效果见,图2
cv.ellipse(img, (256, 256), (100, 50), 0, 0, 360, 255, -1)

cv.imshow("画椭圆", img)
cv.waitKey(0)
cv.destroyWindow("画椭圆")
# cv.destroyAllWindows()

效果图:
图1:
在这里插入图片描述
图2:
在这里插入图片描述

画多边形

画多边形,首先你需要顶点的做坐标。将这些点组成一个形状为 ROWSx1x2 的数组,ROWS 是顶点数,它应该是 int32 类型。这里我们绘制一个顶点是黄色的小多边形。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)

# 画多边形
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv.polylines(img, [pts], True, (0, 255, 255))

cv.imshow("画多边形", img)
cv.waitKey(0)
cv.destroyWindow("画多边形")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述
注意:

  • 如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状。
  • cv.polylines() 能画很多线条。只需创建你想绘制所有线条的列表,然后将其传给这个函数。所有线条都将单独绘制。绘制一组线条比多次调用 cv.line() 效率更高。

给图像加文字

在图像上加文字,你需要指定以下内容。

  • 你想写的文字数据。
  • 你想写的位置坐标 (如 左下角开始)。
  • 字体类型 (支持的字体,查看 cv.putText() 文档)
  • 常规的如颜色,粗细,线型等。为了更好看,线型使用 lintType =cv.LINE_AA

我们将在图像上写一个白色的 OpenCV 。
示例代码:

import numpy as np
import cv2 as cv

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), np.uint8)

# 给图像加文字
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (10, 400), font, 4, (255, 255, 255), 2, cv.LINE_AA)

cv.imshow("给图像加文字", img)
cv.waitKey(0)
cv.destroyWindow("给图像加文字")
# cv.destroyAllWindows()

效果图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++内存管理机制(侯捷)笔记1

C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第一讲primitives的笔记 截至…

【提示学习论文六】MaPLe: Multi-modal Prompt Learning论文原理

文章目录 MaPLe: Multi-modal Prompt Learning 多模式提示学习文章介绍动机MaPLe:Multi-modal Prompt Learning 模型结构1、Deep Language Prompting 深度语言提示2、Deep Vision Prompting 深度视觉提示3、Vision Language Prompt Coupling 视觉语言提示耦合提示耦合过程 实验…

使用MistNet在COCO128数据集上协作训练Yolo-v5

本案例介绍如何在MNIST手写数字分类场景中,使用名为MistNet的聚合算法训练联邦学习作业。数据分散在不同的地方(如边缘节点、摄像头等),由于数据隐私和带宽的原因,无法在服务器上聚合。因此,我们不能将所有…

linux手动安装 vscode-server

适用场景 很多时候,我们需要在本机(比如windows)通过remote ssh访问远程服务器(一般是ubuntu),但经常出现 vscode 一直连不上远程服务器的情况,看一下 log: 这个log表示远程服务器…

长尾分布定义,举个物种长尾分布和词频长尾分布的例子。

问题描述:长尾分布定义,举个物种长尾分布和词频长尾分布的例子。 问题解答: 长尾分布是一种概率分布的类型,它描述的是一种极端事件或者稀有事件的发生概率。具体来说,长尾分布描述的是少量的类别占据了大部分的样本…

uniapp 设置底部导航栏

uniapp 设置原生 tabBar 底部导航栏。 设置底部导航栏 一、创建页面,一定要在 pages.json 文件中注册。 二、在 pages.json 文件中,设置 tabBar 配置项。 pages.json 页面 {"pages": [...],"globalStyle": {...},"uniIdRout…

获取ffmpeg转码的实时进度

文章目录 前言一、需求二、实现获取 ffmpeg 转码的实时进度1、思路梳理2、源码修改 三、运行结果 前言 本文记录查看 ffmpeg 进行转码时的实时进度。所用的工程基于上个博客编译成功的工程:使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c 一、需求 使用 ffmepg 对音…

二叉树题目:完全二叉树插入器

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:完全二叉树插入器 出处:919. 完全二叉树插入器 难度 6 级 题目描述 要求 完全二叉树是每一层(除最后一层外)都…

Word·VBA实现邮件合并

目录 制作邮件合并模板VBA实现邮件合并举例 之前写过的一篇使用《python实现word邮件合并》,本文为vba实现方法 制作邮件合并模板 域名可以使用中文,最终完成的word模板,wps操作步骤类似 VBA实现邮件合并 在Excel启用宏的工作表运行以下代…

攒机到底能省多少钱?

昨天弄好了攒机配置,今天要求配置一些更为实用的配置,只是作为一般办公,单位买进来的计算机都是联想,价格普遍在7000元以上,出于省钱和实用目的,今天搭配了一个组机方案。 上面的配置对付一般办公足够&…

查看进程对应的路径查看端口号对应的进程ubuntu 安装ssh共享WiFi设置MyBatis 使用map类型作为参数,复杂查询(导出数据)

Linux 查询当前进程所在的路径 top 命令查询相应的进程号pid ps -ef |grep 进程名 lsof -I:端口号 netstat -anp|grep 端口号 cd /proc/进程id cwd 进程运行目录 exe 执行程序的绝对路径 cmdline 程序运行时输入的命令行命令 environ 记录了进程运行时的环境变量 fd 目录下是进…

[HCTF 2018]Warmup

[HCTF 2018]Warmup wp 进入页面&#xff1a; 查看源码&#xff1a; 发现提示&#xff1a;source.php &#xff0c;直接访问&#xff0c;得到源代码&#xff1a; <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist [&qu…

ROS-urdf集成gazebo

文章目录 一、URDF与Gazebo基本集成流程二、URDF集成Gazebo相关设置三、URDF集成Gazebo实操四、Gazebo仿真环境搭建 一、URDF与Gazebo基本集成流程 1.创建功能包 创建新功能包&#xff0c;导入依赖包: urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins 2.编写URD…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑨

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷9 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷9 模块一 …

阿里云服务器的tcp端口无法访问(云服务厂家问题?)

问题->无法访问 阿里云服务器的tcp端口 最近一台阿里云服务器的一个端口61616无法访问&#xff0c;在服务器内用外网地ip发现无法访问&#xff0c;用内网ip访问是正常的&#xff0c;通过技术排查&#xff1a; 解决->无法访问 阿里云服务器的tcp端口 1 配置官网的安全组…

ArkTS - 数据持久化

一、概述 应用数据持久化&#xff0c;是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象&#xff0c;存储介质上的数据形态可能是文本、数据库、二进制文件等。 持久&#xff08;Persistence&#xff09;&#xff0…

Unity编辑器扩展(外挂)

每日一句:未来的样子藏在现在的努力里 目录 什么是编译器开发 C#特性[System.Serializable] 特殊目录 命名空间 /*检视器属性控制*/ //添加变量悬浮提示文字 //给数值设定范围&#xff08;最小0&#xff0c;最大150&#xff09; //指定输入框&#xff0c;拥有5行 //默认…

机器学习激活函数

激活函数 激活函数是人工神经网络中的一个重要组成部分。它们用于向神经网络中添加非线性因素&#xff0c;使得网络能够解决复杂问题&#xff0c;如图像识别、语言处理等。激活函数的作用是决定一个神经元是否应该被激活&#xff0c;也就是说&#xff0c;它帮助决定神经元的输…

jupyter notebook 配置conda 虚拟环境python

conda创建python环境 conda create -n openvoice python3.9 激活环境 source activate openvoice 在虚拟环境中安装ipykernel pip install ipykernel 添加虚拟环境进到 jupyter notebook python -m ipykernel install --user --name openvoice --display-name openvoice …

计算机网络必考大题

TCP / IP 五层协议或OSI七层参考模型 CRC校验码&#xff08;也称为循环冗余码&#xff09; 1、根据生成多项式P(x)确定除数&#xff1b; 2、给生成多项式的P(x)的最高阶补0&#xff1b; 3、给信息位(补0后)与除数做异或运算&#xff0c;得到余数。 不相同为1 ^ 4、得到的余数补…