从零开始学cv-17:图像绘制基本图形

文章目录

  • 前言
  • 一、绘制直线与箭头
  • 二、绘制矩形
  • 三、绘制圆形椭圆形


前言

随着计算机视觉技术的不断发展,OpenCV作为一款强大的开源图像处理库,受到了越来越多开发者的喜爱。本文将带领读者走进OpenCV的世界,从基础入手,详细介绍如何在图片上进行绘制操作。通过学习本文,您将掌握如何在图片上绘制线条、矩形、圆形等基本图形,以及如何为图片添加文字。让我们一起探索图像处理的艺术,开启创意无限的世界。

一、绘制直线与箭头

在opencv中绘制直线的api为cv2.line(img, pt1, pt2, color, thickness, lineType, shift)
参数说明:

img: 要绘制直线的图像。
pt1: 直线起点坐标,格式为(x1, y1)。
pt2: 直线终点坐标,格式为(x2, y2)。
color: 直线的颜色,使用BGR格式,例如蓝色为(255, 0, 0)。
thickness: 直线的粗细,如果为-1,则绘制填充的矩形。
lineType: 线条的类型,通常使用8连接类型。
shift: 坐标点的小数位数。

绘制箭头的直线api为cv2.arrowedLine(img, pt1, pt2, color, thickness, line_type, shift, tipLength)
参数说明:

img: 输出图像,它应该是用来绘制箭头的图像,可以是灰度图像或彩色图像。
pt1: 箭头起点,格式为 (x1, y1)。
pt2: 箭头终点,格式为 (x2, y2)。
color: 箭头的颜色,使用 BGR 格式,例如蓝色为 (255, 0, 0)。
thickness: 线条的粗细。如果为 -1,则绘制填充的箭头。
line_type: 线条的类型,通常使用 8 连接类型,表示 8 邻接。
shift: 坐标点的小数位数。
tipLength: 箭头尖端长度,表示为箭头总长度的比例(通常在 0 到 1 之间)。默认值为 0.1。

案例:

import cv2
import numpy as np
# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)
# 定义箭头的起点和终点
pt0 = (20, 20)
pt1 = (50, 50)
pt2 = (150, 150)
# 绘制直线
cv2.line(img, pt0, pt1, (0, 255, 0), 2)
# 绘制箭头
cv2.arrowedLine(img, pt1, pt2, (255, 0, 0), thickness=2, tipLength=0.1)
# 显示图像
cv2.imshow('Arrowed Line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

二、绘制矩形

在opencv中实现绘制矩形的api为:cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
函数介绍:

img: 要在其上绘制矩形的输入图像。图像应该是一个已经存在的图像矩阵,可以是灰度图像或彩色图像。
pt1: 矩形的一个角的坐标,格式为 (x1, y1)。
pt2: 与 pt1 相对的矩形的另一个角的坐标,格式为 (x2, y2)。
color: 矩形的颜色,使用 BGR 格式,例如红色为 (0, 0, 255)。
thickness: 矩形边框的粗细。如果为 -1,则矩形内部将被填充指定的颜色。
lineType: 线条的类型,用于指定绘制矩形边框的连接类型。通常使用 cv2.LINE_8(8 连接)。
shift: 坐标点的小数位数。这个参数用于绘制亚像素精度的矩形,但在大多数情况下不需要使用。

代码示例:

import cv2
import numpy as np# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)# 定义矩形的两个对角点
pt1 = (50, 50)
pt2 = (150, 100)# 绘制矩形
cv2.rectangle(img, pt1, pt2, (0, 255, 0), thickness=2)# 显示图像
cv2.imshow('Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述
cv2.rectangle只能绘制垂直矩形,若想要绘制倾斜矩形需要知道矩形的四个点坐标,然后通过cv2.drawContours()绘制矩形轮廓。

三、绘制圆形椭圆形

绘制圆形的api为cv2.circle(img, center, radius, color, thickness=1, lineType=8, shift=0)
参数说明:

img: 这是你要在其上绘制圆的图像。它应该是一个二维或三维的numpy数组。
center: 这是一个元组,表示圆心的坐标 (x, y)。
radius: 这是一个整数,表示圆的半径。
color: 这是一个元组,表示圆的颜色。在 OpenCV 中,颜色是用 BGR 格式表示的,而不是 RGB。例如,蓝色是 (255, 0, 0)。
thickness: 这是一个整数,表示圆的线条粗细。如果设置为 -1,则圆将被填充。如果设置为 0 或省略,则不会绘制圆。
lineType: 这个参数指定了圆边缘的线型。它的默认值是 8,表示 8 连接线型。其他的线型包括 4(4 连接线型)和 CV_AA(抗锯齿线型)。
shift: 这个参数是圆心坐标和半径的小数位数。默认值是 0,表示圆心坐标和半径都是整数。这个参数很少使用。

案例:

import cv2
import numpy as np# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)# 定义圆的中心点坐标和半径
center_coordinates = (100, 100)
radius = 50
# 定义圆的颜色和线条粗细
color = (255, 0, 0)  # 蓝色
# 绘制圆
cv2.circle(img, center_coordinates, radius, color, thickness=-1, lineType=cv2.LINE_AA)
# 显示图像
cv2.imshow('Circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

绘制椭圆的api为:cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)。
参数说明:

img: 这是你要在其上绘制椭圆的图像。
center: 这是一个元组,表示椭圆中心的坐标 (x, y)。
axes: 这是一个元组,表示椭圆主轴的长度 (长轴长度, 短轴长度)。
angle: 这是一个浮点数,表示椭圆旋转的角度(逆时针方向)。角度是相对于 x 轴的。
startAngle: 这是一个浮点数,表示椭圆弧的起始角度,以度为单位。
endAngle: 这是一个浮点数,表示椭圆弧的结束角度,以度为单位。
color: 这是一个元组,表示椭圆的颜色。颜色是用 BGR 格式表示的。
thickness: 这是一个整数,表示椭圆轮廓的线条粗细。如果设置为 -1,则椭圆将被填充。
lineType: 这个参数指定了椭圆边缘的线型。默认值是 8,表示 8 连接线型。
shift: 这个参数是中心坐标和轴长度的小数位数。

使用案例:

import cv2
import numpy as np# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)# 定义椭圆的中心点坐标、轴长度、旋转角度、起始角度和结束角度
center_coordinates = (100, 100)
axesLength = (50, 25)
angle = 0
startAngle = 0
endAngle = 360# 定义椭圆的颜色和线条粗细
color = (255, 0, 0)  # 蓝色
thickness = -1  # 填充椭圆# 绘制椭圆
cv2.ellipse(img, center_coordinates, axesLength, angle, startAngle, endAngle, color, thickness)# 显示图像
cv2.imshow('Ellipse', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

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

相关文章

冷热数据分离

优质博文:IT-BLOG-CN 一、背景 随着机票业务的快速发展,订单量持续增长对业务性能带来影响,需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间&…

腾讯IM SDK:TUIKit发送多张图片

一、问题描述 在使用腾讯IM DEMO&#xff08;https://github.com/TencentCloud/chat-uikit-vue.git&#xff09;时发现其只支持发送一张图片&#xff1a; 二、解决方案 // src\TUIKit\components\TUIChat\message-input-toolbar\image-upload\index.vue<inputref"inp…

AcWing 802. 区间和(离散化算法,python)

本篇博客详细讲解一下离散化知识点&#xff0c;通过讲解和详细列题带大家掌握离散化。 题目&#xff1a; 原题链接&#xff1a;https://www.acwing.com/problem/content/description/804/ 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 0。 现在&#xff0c;…

记一次pyc逆向

.py文件   源代码文件。   这是开发者编写的 Python 源代码文件&#xff0c;包含了可执行的 Python 代码。 .pyc文件   字节码文件。   Python 源文件&#xff08;.py&#xff09;在执行时会被编译为字节码&#xff0c;并存储在 __pycache__ 目录下&#xff0c;文件名通…

PHP变量(第④篇)

本栏目教学是php零基础到精通&#xff0c;如果你还没有安装php开发工具请查看下方链接&#xff1a; Vscode、小皮面板安装-CSDN博客 今天来讲一讲php中的变量&#xff0c;变量是用于存储信息的"容器"&#xff0c;这些数据可以在程序执行期间被修改&#xff08;即其…

解决Nginx出现“Too many open files”的问题

解决Nginx出现“Too many open files”的问题 在那个不经意的瞬间&#xff0c;我感到一阵莫名的恍惚。同事突然提出要看我的手机&#xff0c;她的目光落在了我那泛黄的手机壳上。出乎意料地&#xff0c;她开始细心地擦拭&#xff0c;从内到外&#xff0c;动作轻柔而专注。那一刻…

Linux——磁盘分区、挂载

Linux 分区 原理介绍 原理图如下 当我们在/home目录下新建一个文件a.txt时&#xff0c;该文件实际上是存放在硬盘B的分区1中的&#xff0c;这就是图里说的&#xff0c;当进入某个目录&#xff0c;可以进入到该目录下挂载的分区里的意思 硬盘说明 应用实例&#xff1a;挂载一个…

【Flask】Flask数据库

【Flask】Flask数据库 1.概述2.使用Flask-SQLAlchemy管理数据库3.定义模型4.关系5.数据库操作创建表插入行修改行删除行查询行 1.概述 大多数的数据库引擎都有对应的 Python 包&#xff0c;包括开源包和商业包。Flask 并不限制你使用何种类型的数据库包&#xff0c;因此可以根…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

前端登录页面验证码

首先&#xff0c;在el-form-item里有两个div&#xff0c;各占一半&#xff0c;左边填验证码&#xff0c;右边生成验证码 <el-form-item prop"code"><div style"display: flex " prop"code"><el-input placeholder"请输入验证…

小赢卡贷公益行:乡村振兴与多元公益并进

在金融科技的浪潮中&#xff0c;小赢卡贷不仅以其创新的金融产品和服务赢得了市场的广泛认可&#xff0c;更以其背后的公益之心&#xff0c;积极履行社会责任&#xff0c;传递着温暖与希望。小赢公益基金会&#xff0c;作为小赢卡贷社会责任的延伸&#xff0c;主要聚焦于乡村振…

Hi3061M开发板——系统时钟频率

这里写目录标题 前言MCU时钟介绍PLLCRG_ConfigPLL时钟配置另附完整系统时钟结构图 前言 Hi3061M使用过程中&#xff0c;AD和APT输出&#xff0c;都需要考虑到时钟频率&#xff0c;特别是APT&#xff0c;关系到PWM的输出频率。于是就研究了下相关的时钟。 MCU时钟介绍 MCU共有…

unix中如何申请进程调度的优先级

一、前言 unix系统中&#xff0c;进程的调度是由内核决定的。在一个系统中&#xff0c;进程的优先级越高&#xff0c;表示其在一定时间中占用cpu的时间越久。本文将介绍unix系统如何修改以及获取进程的优先级。 二、nice值 nice值是unix系统中用于表征进程优先级的一个参数。…

ssh -T git@github.com 出现异常

上传代码到github 私有仓库 步骤 1. 生成 SSH Key&#xff08;如果没有&#xff09; 打开终端并运行&#xff1a; bash 复制 ssh-keygen -t ed25519 -C "your_emailexample.com"按提示保存密钥文件和设置密码短语&#xff08;可选&#xff09;。默认位置是 ~/.…

recyclerView(kotlin)

recyclerView的优点 使用viewHolderRecycledViewPool的方式复用资源&#xff0c;提高性能利用LayoutManager&#xff0c;可根据不同需求使用不同的布局&#xff0c;且可以方便使用对应布局提供的方法&#xff0c;如快速定位item等。RecyclerView 提供了一个 ItemAnimator 接口…

计算机毕业设计Django+Vue.js豆瓣图书推荐系统 图书评论情感分析 豆瓣图书可视化大屏 豆瓣图书爬虫 数据分析 图书大数据 大数据毕业设计 机器学习

《DjangoVue.js豆瓣图书推荐系统》开题报告 一、研究背景与意义 1. 研究背景 随着数字化时代的来临&#xff0c;图书资源日益丰富&#xff0c;用户面临着信息过载的问题。如何在海量图书中快速找到符合个人兴趣和需求的书籍成为了亟待解决的问题。传统的图书检索方式往往基于…

OmniDrive 论文学习

OmniDrive: A Holistic LLM-Agent Framework for Autonomous Driving with 3D Perception, Reasoning and Planning 解决了什么问题&#xff1f;相关工作端到端自动驾驶多模态语言模型&#xff08;MLLMs&#xff09;Drive LLM-Agents and BenchmarksDrive LLM-Agents基准测试 提…

柔性作业车间调度(FJSP)

1.1 调度问题的研究背景 生产调度是指针对一项可分解的工作(如产品制造),在尽可能满足工艺路线、资源情况、交货期等约束条件的前提下,通过下达生产指令,安排其组成部分(操作)所使用的资源、加工时间及加工的先后顺序,以获得产品制造时间或成本最优化的一项工作。 一般研究车间…

MySQL 日志 - Binlog

文章目录 binlog 的格式mysqbinlog 工具SHOW binlog events;binlog 和 redo log 对比 https://dev.mysql.com/doc/refman/8.4/en/binary-log.html binlog 全称 BinaryLog&#xff0c;是 MySQL 数据库中用于记录所有更改数据库状态的事件的日志文件。它主要用于以下几个目的&am…

【hot100-java】二叉树中的最大路径和

二叉树篇 easy. /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …