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

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库,它不仅提供了丰富的图像处理功能,还支持图像的绘制。绘制简单的几何图形(如线条和矩形)是 OpenCV 中常见的操作。在本篇文章中,我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形。

绘制线条

在 OpenCV 中,可以使用 cv2.line() 函数来绘制直线。该函数的语法如下:

cv2.line(image, start_point, end_point, color, thickness)
  • image:待绘制的图像。
  • start_point:起点坐标(x, y)。
  • end_point:终点坐标(x, y)。
  • color:线条颜色,格式为 (B, G, R)
  • thickness:线条的粗细,默认为 1。
示例代码:绘制一条红色的线
import cv2
import numpy as np# 创建一个黑色的图像
image = np.zeros((500, 500, 3), dtype=np.uint8)# 定义线条的起点和终点
start_point = (50, 50)
end_point = (450, 450)# 定义线条颜色(红色)
color = (0, 0, 255)  # BGR格式# 绘制线条
cv2.line(image, start_point, end_point, color, 5)# 显示图像
cv2.imshow("Line", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出图像

绘制矩形

OpenCV 提供了 cv2.rectangle() 函数来绘制矩形。该函数的语法如下:

cv2.rectangle(image, start_point, end_point, color, thickness)
  • image:待绘制的图像。
  • start_point:矩形左上角的坐标 (x, y)。
  • end_point:矩形右下角的坐标 (x, y)。
  • color:矩形颜色,格式为 (B, G, R)。
  • thickness:矩形边框的粗细。如果填充矩形,则设置为 -1
示例代码:绘制一个绿色的矩形
import cv2
import numpy as np# 创建一个白色的图像
image = np.ones((500, 500, 3), dtype=np.uint8) * 255# 定义矩形的起点和终点
start_point = (100, 100)
end_point = (400, 400)# 定义矩形颜色(绿色)
color = (0, 255, 0)  # BGR格式# 绘制矩形
cv2.rectangle(image, start_point, end_point, color, 5)# 显示图像
cv2.imshow("Rectangle", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出图像

填充矩形

如果要绘制一个填充的矩形,只需将 thickness 设置为 -1,OpenCV 会自动将矩形内部填充为指定的颜色。

示例代码:绘制一个填充的蓝色矩形
import cv2
import numpy as np# 创建一个白色的图像
image = np.ones((500, 500, 3), dtype=np.uint8) * 255# 定义矩形的起点和终点
start_point = (100, 100)
end_point = (400, 400)# 定义矩形颜色(蓝色)
color = (255, 0, 0)  # BGR格式# 绘制填充矩形
cv2.rectangle(image, start_point, end_point, color, -1)# 显示图像
cv2.imshow("Filled Rectangle", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出图像

代码解释

  1. 创建图像:我们使用 numpy.zeros() 创建一个黑色的图像,或者使用 numpy.ones() 创建一个白色的图像。dtype=np.uint8 表示图像数据类型为 8 位无符号整数,这在 OpenCV 中通常用于表示图像像素值(范围 0-255)。
  2. 绘制图形:通过 cv2.line()cv2.rectangle() 函数来绘制线条和矩形。我们定义了起始点和结束点,选择了颜色并指定了线条粗细。
  3. 显示图像cv2.imshow() 函数用于显示图像,cv2.waitKey(0) 等待用户按下任意键后关闭图像窗口,cv2.destroyAllWindows() 关闭所有打开的窗口。

总结

通过 OpenCV 绘制线条和矩形是一个非常简单的操作,可以用来标记图像中的区域、进行图形处理或为图像添加一些基本的标记。无论是使用 cv2.line() 还是 cv2.rectangle(),你都可以轻松自定义图形的颜色、位置和大小,这对于各种图像处理应用非常有用。

相关文章:

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库,它不仅提供了丰富的图像处理功能,还支持图像的绘制。绘制简单的几何图形(如线条和矩形)是 OpenCV 中常见的操作。在本篇文章中,我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…...

npm 切换镜像源

设置镜像源 npm config set registry https://mirrors.huaweicloud.com/repository/npm/ npm 官方原始镜像网址是:https://registry.npmjs.org/ 淘宝 NPM 镜像:https://registry.npm.taobao.org 阿里云 NPM 镜像:https://npm.aliyun.com 腾…...

CSS(四)display和float

display display 属性用于控制元素的显示类型,用的 display 值包括: block:块级元素 使元素成为块级元素,占据一整行,前后有换行宽度默认为父容器的 100%,可以设置宽高,支持 margin、padding、…...

MMaudio AI:如何通过 AI 实现精准的视频到音频合成

1. 引言:视频音效制作的新纪元 无论是短视频创作者还是电影后期制作团队,音效始终是提升作品质量的关键。然而,手动调整音效不仅耗时,还容易出错。试想,如果一项 AI 技术能够根据视频内容自动生成与画面完美同步的音效…...

SQL进阶技巧:如何分析双重职务问题?

目录 0 背景描述 1 数据准备 2 问题分析 方法2:利用substr函数,充分利用数据特点【优秀解法】 3 小结...

OpenCV相机标定与3D重建(37)计算两幅图像之间单应性矩阵(Homography Matrix)的函数findHomography()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵(Homography Matrix)的…...

Nacos配置管理+共享配置、配置热更新

1. 什么是配置管理? Nacos 配置管理是一个集中管理配置的工具。 它把微服务的配置集中存放,方便管理。可以动态更新配置,配置变了,微服务能马上知道并更新,不用重启。还能进行版本控制,记录配置的历史版本方便回滚。…...

asp.net core系统记录当前在线人数

实时记录当前在线人数,登录后保持120秒在线状态,在线状态保存在缓存中,采用滑动过期,在120秒内请求了系统,自动续活120秒;超过时间则移除用户在线状态; 需要在登录过滤器标记用户在线状态需要排…...

秒杀场景的设计思考

秒杀场景的设计思考 在学习Redis的之后,一个绕不开的话题就是秒杀系统的设计。本文将从下面👇🏻几个方面展开一下个人简单的理解: 秒杀场景的介绍设计的核心思路怎么限流、削峰、异步planB总结 ‍ 秒杀场景的介绍 秒杀场景是…...

快速掌握Haproxy原理架构

文章目录 一、原理架构二、无负载均衡三、四层负载均衡的工作流程四、七层负载均衡工作流程五、基础属性mode 属性retries 属性maxconn 属性clitimeout 属性servtimeout 属性states uri 属性 一、原理架构 四层tcp代理:Haproxy仅在客户端和服务器之间双向转发流量&…...

基于Centos7.X系统端口占用处理

1、查看当前端口占用情况 使用 netstat 查看系统中占用的端口和相关的进程。 netstat -tuln 或者 ss -tnl 选项解释&#xff1a; -t 显示 TCP 连接-u 显示 UDP 连接-l 显示监听的端口-n 以数字形式显示端口号和 IP 2、具体进程的pid netstat -anp | grep <port_numb…...

MySQL的索引失效的原因有那些

1. 数据类型不匹配 详细说明&#xff1a;MySQL在比较不同数据类型的值时&#xff0c;可能会尝试进行隐式转换。如果这种转换导致了复杂度增加或无法直接利用索引&#xff0c;则会导致索引失效。 实例与解决方案&#xff1a; -- 错误示例&#xff1a;数据类型不匹配 select *…...

Java重要面试名词整理(十):Kafka

文章目录 Kafka简介相关概念Kraft集群 Kafka收发消息梳理客户端工作机制消费者分组消费机制生产者拦截器机制消息序列化机制消息分区路由机制生产者消息缓存机制发送应答机制生产者消息幂等性生产者消息事务 Kafka集群架构设计-Kafka的Zookeeper元数据梳理Leader Partition选举…...

内置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的带有ALC&#xff08;自动电平控制&#xff09;的前置音频放大器芯片&#xff0c;最初产品为单声道/立体声收录机及盒式录音机而开发&#xff0c;作为录音/回放的磁头放大器使用&#xff1b;由于产品的高增益、低噪声及ALC外部可调的特性&…...

04-微服务02

我们将黑马商城拆分为5个微服务&#xff1a; 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口&#xff0c;相信大家在与前端联调的时候发现了一些问题&#xff1a; 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址…...

Java中的this关键字详解:深入理解与应用

目录 一、this关键字的基本概念 二、this指代当前对象 示例&#xff1a; 三、this区分成员变量与方法参数 示例&#xff1a; 四、使用this()调用构造方法 示例&#xff1a; 五、使用this传递当前对象 示例&#xff1a; 六、this的其他注意事项输出结果&#xff1a; …...

2、C#基于.net framework的应用开发实战编程 - 设计(二、四) - 编程手把手系列文章...

二、设计&#xff1b; 二&#xff0e;四、制定设计规范&#xff1b; 编码规范在软件编程里起到了非常重要的作用&#xff0c;主要是让代码更加的规范化&#xff0c;更加的简洁&#xff0c;更加的漂亮&#xff0c;更加的能够面向对象显示。 以前那个系列就有发布C#的编码规范的文…...

设置首选网络类型以及调用Android框架层的隐藏API

在Android SDK中提供的framework.jar是阉割版本的&#xff0c;比如有些类标记为hide&#xff0c;这些类不会被打包到这个jar中&#xff0c;而有些只是类中的某个方法或或属性被标记为hide&#xff0c;则这些类或属性会被打包到framework.jar&#xff0c;但是我们无法调用&#…...

“Gold-YOLO:基于聚合与分发机制的高效目标检测新范式”

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月26日8点00分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址&#xff08;有视频&#xf…...

神经网络-AlexNet

AlexNet是在2012年的ImageNet竞赛后&#xff0c;整理发表的文章&#xff0c;也是对CNN网络的衍生。 网络结构 AlexNet网络结构如下图所示&#xff0c;网络分为了上下两部分&#xff0c;对应两个不同的GPU训练&#xff0c;可以更好的利用GPU算力。只有在特殊的网络层后&#x…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...