当前位置: 首页 > news >正文

【Python Opencv】Opencv画图形

文章目录

  • 前言
  • 一、画图形
    • 1.1 画线
    • 1.2 画矩形
    • 1.3 画圆
    • 1.4 画椭圆
    • 1.5 添加文本
  • 总结


前言

在计算机视觉和图像处理中,OpenCV不仅可以处理图像和视频,还提供了一组功能强大的工具,用于在图像上绘制各种形状和图形。这些功能使得我们能够在图像上标注、分析和突出显示感兴趣的区域。本文将介绍如何使用Python和OpenCV绘制各种图形,包括线条、矩形、圆形等,以及如何添加文本。这对于图像处理和计算机视觉任务中的可视化和分析非常有用。


目标
学习使用 OpenCV 绘制不同的几何形状
您将学习这些函数:cv.line()、cv.circle()、cv.rectangle()、cv.ellipse()、cv.putText()等。

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

img :要绘制形状的图像
color :形状的颜色。对于 BGR,将其作为元组传递,例如:(255,0,0) 表示蓝色。对于灰度,只需传递标量值即可。
thickness : 线或圆等的厚度如果为圆形等闭合图形传递 -1,它将填充形状。默认厚度 = 1
lineType :线的类型,是否为 8 连接、抗锯齿线等,默认情况下,它是 8 连接的。 cv.LINE_AA提供了抗锯齿线,非常适合曲线。

一、画图形

1.1 画线

函数原型:

cv2.line(img, pt1, pt2, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制线条的图像。
pt1: 线条的起点坐标。
pt2: 线条的终点坐标。
color: 线条的颜色,通常是一个BGR元组,例如 (255, 0, 0) 表示蓝色。
thickness: 线条的宽度,整数值。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)cv2.imshow('Line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.2 画矩形

函数原型:

cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制矩形的图像。
pt1: 矩形的左上角坐标。
pt2: 矩形的右下角坐标。
color: 矩形的颜色,通常是一个BGR元组。
thickness: 线条的宽度,整数值。如果为-1,表示填充矩形。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.rectangle(img, (100, 100), (300, 300), (0, 255, 0), 3)cv2.imshow('Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.3 画圆

函数原型:

cv2.circle(img, center, radius, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制圆形的图像。
center: 圆心坐标。
radius: 圆的半径。
color: 圆的颜色,通常是一个BGR元组。
thickness: 线条的宽度,整数值。如果为-1,表示填充圆。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.circle(img, (250, 250), 150, (0, 0, 255), -1)cv2.imshow('Circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.4 画椭圆

函数原型:

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制椭圆的图像。
center: 椭圆中心坐标。
axes: 长轴和短轴的长度。
angle: 旋转角度。
startAngle: 椭圆弧的起始角度。
endAngle: 椭圆弧的结束角度。
color: 椭圆的颜色,通常是一个BGR元组。
thickness: 线条的宽度,整数值。如果为-1,表示填充椭圆。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.ellipse(img, (256, 256), (100, 50), 45, 0, 180, (255, 255, 0), -1)cv2.imshow('Ellipse', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.5 添加文本

  1. 添加文本:

函数原型:

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

在这里插入图片描述

参数说明:

img: 图像,要在其上添加文本的图像。
text: 要添加的文本字符串。
org: 文本的起始坐标,即基线左下角的点。
fontFace: 字体类型,例如 cv2.FONT_HERSHEY_SIMPLEX。
fontScale: 字体缩放因子。
color: 文本的颜色,通常是一个BGR元组。
thickness: 文本线条的宽度,整数值。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
bottomLeftOrigin: 如果为 True,则文本原点在左下角;如果为 False(默认),则原点在左上角。
示例代码:

import cv2
import numpy as npimg = np.zeros((512, 512, 3), dtype=np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10, 300), font, 4, (255, 255, 255), 2, cv2.LINE_AA)cv2.imshow('Text', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


总结

使用OpenCV绘制图形是进行图像处理和计算机视觉任务中不可或缺的一部分。从简单的线条到复杂的文本,OpenCV提供了丰富的绘图功能。通过本文的介绍,你学会了如何在图像上绘制线条、矩形、圆形和文本,并可以根据需要调整颜色、大小和其他参数。这些技能对于图像分析、目标定位和可视化等任务都非常重要。希望这篇文章能够帮助你更好地利用OpenCV进行图形绘制。

相关文章:

【Python Opencv】Opencv画图形

文章目录 前言一、画图形1.1 画线1.2 画矩形1.3 画圆1.4 画椭圆1.5 添加文本 总结 前言 在计算机视觉和图像处理中,OpenCV不仅可以处理图像和视频,还提供了一组功能强大的工具,用于在图像上绘制各种形状和图形。这些功能使得我们能够在图像上…...

了解防抖和节流:提升前端交互体验的实用策略

了解防抖和节流:提升前端交互体验的实用策略 前言什么是防抖?什么是节流?应用实例防抖实例节流实例 前言 本文将重点介绍前端性能优化方法之一的防抖和节流。首先解释了它们的概念和原理,然后探讨了它们在前端开发中的应用场景&a…...

SQL学习之增删改查

文章目录 数据库数据类型建表create table插入数据insert into查询数据select from修改数据update set删除数据delete from备份ctas结果插入iis截断表 truncate table修改表结构alter table添加注释 注:本文的SQL语法是基于Oracle数据库操作的,但是基本的…...

Ansible角色定制实例

目录 角色定制:roles 角色定制实例:利用角色部署wordpress 1.在roles目录下生成对应的目录结构 2.定义配置文件 ①nginx ②php ③mysql ④定义剧本文件 ⑤启动服务 角色定制:roles 对于普通的剧本(playbook)有…...

ElastaticSearch--- es多字段聚合

在使用es时,我们经常会用到聚合查询。 简单的聚合查询,已经在前面介绍过,详情见: https://www.cnblogs.com/expiator/p/13843969.html 有时,也会用到多字段聚合查询。类似于Mysql的Group By多个字段。 比如&#xf…...

本周Github有趣开源项目:Rspress等6个

Github有趣的项目、工具和库: 1、sshx 一个基于 Web 的安全协作终端。通过网络进行快速、协作的实时终端共享 特征: 运行一个命令即可与任何人共享您的终端。 在无限画布上调整大小、移动窗口以及自由缩放和平移。 查看其他人的光标实时移动。 连接到…...

【华为OD题库-016】字符串摘要-Java

题目 给定一个字符串的摘要算法,请输出给定字符串的摘要值 1、去除字符串中非字母的符号 2、如果出现连续字符(不区分大小写),则输出:该字符(小)+连续出现的次数 3、如果是非连续的宁符(不区分大小写),则输出:该字符(小写)该字母之…...

生成式AI - Knowledge Graph Prompting:一种基于大模型的多文档问答方法

大型语言模型(LLM)已经彻底改变了自然语言处理(NLP)任务。它们改变了我们与文本数据交互和处理的方式。这些强大的AI模型,如OpenAI的GPT-4,改变了理解、生成人类类似文本的方式,导致各种行业出现…...

深度学习AIR-PolSAR-Seg图像数据预处理

文章目录 深度学习sar图像数据预处理一.图片预处理操作1.log(1x)处理2.sqrt平方化处理 二.原网络训练效果展示原始数据训练效果展示: 三.对比实验1.采用原始数据2.采用取log(1x)后的数据3.采用取平方后归一化处理: 四.总结:五.思考 深度学习s…...

求最大公约数math.gcd()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 求最大公约数 math.gcd() [太阳]选择题 下列代码执行输出的结果是? import math print("【执行】print(math.gcd(6, 8))") print(math.gcd(6, 8)) print(&quo…...

数据结构之队列

目录 引言 队列的概念与结构 队列的实现 定义 初始化 销毁 入队 判断队列是否为空 出队 获取队头元素 获取队尾元素 检测队列中有效元素个数 元素访问 源代码 queue.h queue.c test.c 引言 数据结构之路经过栈后,就来到了与栈联系紧密的兄弟—…...

MySQL数据库——存储过程-循环(while、repeat、loop)

目录 while 介绍 案例 repeat 介绍 案例 loop 介绍 案例一 案例二 while 介绍 while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为: -- 先判定条件,如果条件为true,则执行逻辑&#…...

Django路由

路由系统 1.Django1中的路由1.1 普通形式1.2 分组1.2.1 无名分组1.2.2 有名分组 2. Django2版本2.1 传统的路由2.2 正则表达式路由 3. 路由分发3.1 include(一般使用此方式做路由分发)3.2 手动分发 4. name别名及使用name的反向URL生成4.1 一般情况下的别名使用及反向生成4.2 分…...

头歌实践平台-数据结构-二叉树及其应用

第1关:实现二叉树的创建 #include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &i, int len) // 利用先序遍历创建二叉树 // 参数:先序遍历字符串s,字符串初始下标i0,字符串长度len。 // 返回&#xff1…...

2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项

2023.11.11通过html内置"required-star"添加一个红色的星号来表示必填项 在HTML中&#xff0c;可以使用标签来为元素添加说明。同时可以通过添加一个红色的星号来表示必填项。 <!DOCTYPE html> <html lang"en"> <head><meta charse…...

pcie【C#】

根据提供的引用内容&#xff0c;使用C#编写PCIE的Demo需要遵循以下步骤&#xff1a;1.连接好硬件后&#xff0c;烧录bit文件&#xff0c;安装PCIe内核驱动&#xff0c;然后重启计算机。2.打开VS工程&#xff0c;创建一个新的C#控制台应用程序项目。3.在项目中添加对C DLL的引用…...

西门子精智屏数据记录U盘插拔问题总结

西门子精智屏数据记录U盘插拔问题总结 注意: 数据记录过程中不允许带电插拔 U 盘! 数据记录的相关功能可参考以下链接中的内容: TIA博途wincc V16 如何进行变量周期归档?...

(论文阅读27/100)Deep Filter Banks for Texture Recognition and Segmentation

27.文献阅读笔记 简介 题目 Deep Filter Banks for Texture Recognition and Segmentation 作者 Mircea Cimpoi, Subhransu Maji, Andrea Vedaldi, 原文链接 http://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Cimpoi_Deep_Filter_Banks_2015_CVPR_pap…...

ARMday06(串口)

代码&#xff1a; #include "gpio.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h" void init(); char getc(); void putc(const char data); int main() {init();//初始化putc(j);char …...

Rust字符串详解

文章目录 字符串切片String迭代方法基础字符串方法容量操作增删改查 字符串切片 我们所熟知的由双引号括起来的字符串&#xff0c;在Rust中只是个字符串切片&#xff0c;又叫字符串字面值。这种类型一旦创建&#xff0c;则不可更改。但支持索引&#xff0c;从切片中索引出来的…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...