【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对
这段代码的作用是从指定路径读取图像和标签文件,然后在图像上绘制分割区域和相关点,并保存最终的图像。以下是每个函数的具体作用及其解释:
-
read_labels(label_path)
:- 读取指定路径的标签文件。
- 标签文件的每一行表示一个物体的分割信息,包含类别ID和多个坐标点(归一化的x, y值)。
- 返回一个列表,每个元素是一个元组,包含类别ID和坐标点。
-
random_color()
:- 生成一个随机颜色,用于绘制分割区域和边界。
-
draw_segmentation(image, labels)
:- 接受一个图像和标签信息,在图像上绘制分割区域、边界和点。
- 对于每个标签,先将归一化坐标转换为实际像素坐标,然后用随机颜色绘制多边形和边界,最后绘制点。
- 使用
cv2.addWeighted
函数将绘制的分割区域和原始图像进行融合,产生半透明效果。
-
主程序部分:
- 指定图像路径并推导对应的标签文件路径。
- 读取图像和标签。
- 调用
draw_segmentation
函数在图像上绘制分割区域。 - 保存最终绘制后的图像。
改进和优化建议
- 错误处理: 增加对文件读取和解析的错误处理,以避免程序崩溃。
- 颜色透明度: 透明度设置硬编码为100,可以将其作为可配置参数传入函数。
- 文件路径: 路径处理方式可以更灵活,以适应更多的文件组织结构。
完整的改进代码示例
import cv2
import numpy as np
import random
import osdef read_labels(label_path):with open(label_path, 'r') as file:lines = file.readlines()labels = []for line in lines:parts = list(map(float, line.strip().split()))class_id = int(parts[0])points = np.array(parts[1:]).reshape(-1, 2)labels.append((class_id, points))return labelsdef random_color():return [random.randint(0, 255) for _ in range(3)]def draw_segmentation(image, labels, alpha=0.4, color_transparency=100):overlay = image.copy()for class_id, points in labels:# Convert normalized coordinates to absolute pixel valuespoints[:, 0] *= image.shape[1]points[:, 1] *= image.shape[0]points = points.astype(int)# Draw filled polygon with random colorcolor = random_color()cv2.fillPoly(overlay, [points], color + [color_transparency]) # 100 for transparency# Draw edges and pointscv2.polylines(image, [points], isClosed=True, color=color, thickness=2)for point in points:cv2.circle(image, tuple(point), 3, color, -1)# Combine original image with overlaycv2.addWeighted(overlay, alpha, image, 1 - alpha, 0, image)return image# Paths
image_path = r"/ssd/xiedong/lightyolov5/yolo-seg/coco8-seg/images/train/000000000009.jpg"
label_path = image_path.replace("images", "labels").replace(".jpg", ".txt")# Ensure paths exist
if not os.path.exists(image_path):raise FileNotFoundError(f"Image file not found: {image_path}")
if not os.path.exists(label_path):raise FileNotFoundError(f"Label file not found: {label_path}")# Read image and labels
image = cv2.imread(image_path)
labels = read_labels(label_path)# Draw segmentation on the image
segmented_image = draw_segmentation(image, labels)# Save the result
output_path = "segmented_image1.png"
cv2.imwrite(output_path, segmented_image)
print(f"Segmented image saved to {output_path}")
改进点
- 增加了对文件路径存在性的检查,避免文件不存在时程序崩溃。
- 将透明度参数和颜色透明度参数外部化,增加函数的灵活性。
- 在保存结果图像时,打印保存路径,方便用户确认保存位置。
问询、帮助
你如果需要帮助,请看这里:
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
相关文章:

【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对
这段代码的作用是从指定路径读取图像和标签文件,然后在图像上绘制分割区域和相关点,并保存最终的图像。以下是每个函数的具体作用及其解释: read_labels(label_path): 读取指定路径的标签文件。标签文件的每一行表示一个物体的分割信息&#…...

如何保证员工在精益变革中始终保持积极的态度?
在当今日新月异的商业环境中,企业为了保持竞争力,需要不断寻求创新和变革。精益变革作为一种提升效率和质量的有效手段,已逐渐成为企业转型升级的关键。然而,变革往往伴随着挑战和不确定性,如何保证员工在精益变革中始…...

【Java面试】三、Redis篇(下)
文章目录 1、抢券场景2、Redis分布式锁3、Redisson实现分布式锁4、Redisson实现的分布式锁是可重入锁5、Redisson实现分布式锁下的主从一致性6、面试 1、抢券场景 正常思路: 代码实现: 比如优惠券数量为1。正常情况下:用户A的请求过来&a…...

GpuMall智算云:QwenLM/Qwen1.5/Qwen1.5-7B-Chat
Qwen 是阿里巴巴集团 Qwen 团队的大型语言模型和大型多模态模型系列,现在大型语言模型已经升级到 Qwen1.5 版本。 GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 无论是语言模型还是多模态模型,都在大规模的多语言和多模…...
CentOS6.5 下编译 FreeSWITCH 1.2.23 版本
命题作文,慢慢来,一边做,一边记录。 老古董了,查资料很不容易,但朋友说不着急,这很好。 生命的意义在于折腾,不是吗? 先下载 CentOS6.5, 查了下资料,最后…...

2024年03月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 在Python中,hex(2023)的功能是?( ) A:将十进制数2023转化成十六进制数 B:将十进制数2023转化成八进制数 C:将十六进制数2023转化成十进制数 D:将八进制数2023转化成十进制数 答案:A …...

Redis篇 数据的编码方式和单线程模型
编码方式和单线程模型 一.redis中的数据类型二. Redis中查询编码方式命令三. 单线程模型四. 经典面试题,redis为何这么快?什么是IO多路复用? 一.redis中的数据类型 在redis中,数据类型大致分为5种 1.字符串类型 2.哈希 3.列表 4.集合 5.有序集合 redis底层在实现这些数据结构…...

(delphi11最新学习资料) Object Pascal 学习笔记---第13章第4节 (内存管理和接口)
13.4 内存管理和接口 在第11章中,我介绍了接口的内存管理的关键要素。与对象不同,接口是受管理且具有引用计数。如我所提到的,接口引用会增加所引用对象的引用计数,但您可以声明接口引用为弱引用以禁用引用计数(但…...
【记录贴】docker镜像格式报错
1,错误内容 最近想要补一补docker的基础知识,跟着练习的时候,发现下面的错误。 换了其他镜像(docker pull ubantu)也存在同样的问题: 错误内容:docker: mediaType in manifest should be appli…...

设计模式 19 模板模式 Template Pattern
设计模式 19 模板模式 Template Pattern 1.定义 模板模式(Template Pattern)是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。在模板模式中,定义了一个抽象类,其中包含了一个…...
PHP如何实现实时计算使用者消耗服务器资源费用?
最近几天遇到一个客户,提出一个很有意思的东西!当然客户的项目方案这里不方便说,这里就假定客户的项目是腾讯云?哈哈哈哈哈 以前客户的收费方案是按月、按季度、按年收费,现在半路杀出了很多程咬金,导致之前的收费方案有点儿贵,没啥性价比,那就搞一个看起来很“便宜”…...

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置
代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…...

【leetcode 141】环形链表——快慢指针(龟兔赛跑)
给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…...
容器(Container)的详细介绍
容器,作为现代软件开发和部署的核心技术之一,已经成为云计算、微服务架构等领域的基石。容器技术通过提供轻量级的虚拟化环境,实现了应用程序的快速部署、迁移和扩展,极大地提高了软件开发的效率和灵活性。本文将详细介绍容器的概…...
Python 网格变换之平移、旋转、缩放、变换矩阵
网格变换 一、平移1.1、代码示例1.2、结果示例二、旋转2.1、代码示例2.2、结果示例三、缩放3.1、代码示例3.2、结果示例四、变换矩阵4.1、代码示例4.2、结果示例一、平移 网格平移:将网格沿着特定的方向移动一段距离。 1.1、代码示例...

推荐10款优秀的组件库(一)
1.Ant Desgin UI 网址: https://ant-design-mobile.antgroup.com/zh Ant Design - 一套企业级 UI 设计语言和 React 组件库 "Ant Design Mobile"是一个在线的移动端Web体验平台,让你探索移动端Web的体验极限。 添加图片注释,不…...
freertos的信号量和互斥锁学习笔记
freertos的信号量和互斥锁有两个比较形象的例子可以解释两者的主要用途。 第一个是信号量: 使用信号量的最初目的是为了给共享 资源建立一个标志,该标志表示该共享资源被占用情况。这样,当一个任务在访问共享资源之前,可以先对这…...
C++基础——vector的详解与运用
vector的介绍 文档介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,…...
const指针,星号判断方法
一 示例代码 1. const char *p // 指向常量的指针 2. char const *p // 指向常量的指针 3. char * const p // 指针常量二 判断方法 const在星号左边,指向常量的指针,指针p可修改。 const在星号右边,指针常量,指针p不可修改。...

移动摄像头专网需要解vlan,如何解决
🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...