【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对

这段代码的作用是从指定路径读取图像和标签文件,然后在图像上绘制分割区域和相关点,并保存最终的图像。以下是每个函数的具体作用及其解释:

  1. read_labels(label_path):

    • 读取指定路径的标签文件。
    • 标签文件的每一行表示一个物体的分割信息,包含类别ID和多个坐标点(归一化的x, y值)。
    • 返回一个列表,每个元素是一个元组,包含类别ID和坐标点。
  2. random_color():

    • 生成一个随机颜色,用于绘制分割区域和边界。
  3. draw_segmentation(image, labels):

    • 接受一个图像和标签信息,在图像上绘制分割区域、边界和点。
    • 对于每个标签,先将归一化坐标转换为实际像素坐标,然后用随机颜色绘制多边形和边界,最后绘制点。
    • 使用cv2.addWeighted函数将绘制的分割区域和原始图像进行融合,产生半透明效果。
  4. 主程序部分:

    • 指定图像路径并推导对应的标签文件路径。
    • 读取图像和标签。
    • 调用draw_segmentation函数在图像上绘制分割区域。
    • 保存最终绘制后的图像。

改进和优化建议

  1. 错误处理: 增加对文件读取和解析的错误处理,以避免程序崩溃。
  2. 颜色透明度: 透明度设置硬编码为100,可以将其作为可配置参数传入函数。
  3. 文件路径: 路径处理方式可以更灵活,以适应更多的文件组织结构。

完整的改进代码示例

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

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

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

相关文章

【python深度学习】——torch.expand()广播机制|torch.norm()

【python深度学习】——torch.expand广播机制|torch.norm 1. torch.expand()与广播机制2. torch.norm()计算范数3. 结合使用的完整示例代码 1. torch.expand()与广播机制 在处理3D点云时, 有时需要对两帧点云进行逐点的三维坐标相加减、做点积等运算, 但是读入的PCD文件中,点云…

硬盘的分区

目录 概念 硬盘的分区 实操 创建分区 fdisk&#xff08;<2T&#xff09; 创建文件系统 挂载 自动挂载&#xff08;永久挂载&#xff09; gpt区分 swap 交换分区 如何删除已挂载的分区 概念 硬盘&#xff1a;计算机的存储设备。&#xff08;如无特殊说明&#xff0…

sklearn线性回归--岭回归

sklearn线性回归--岭回归 岭回归也是一种用于回归的线性模型&#xff0c;因此它的预测公式与普通最小二乘法相同。但在岭回归中&#xff0c;对系数&#xff08;w&#xff09;的选择不仅要在训练数据上得到好的预测结果&#xff0c;而且还要拟合附加约束&#xff0c;使系数尽量小…

基于springboot+vue的班级综合测评管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

操作系统 实验18 批处理操作接口8:函数

1、建立文件func2.sh&#xff0c;输出文件内容各行及行数 脚本&#xff1a; #!/bin/bash echo -n "请输入一个文件名及路径&#xff1a;" read FILE statisfile(){local i0while read linedo let iecho "$i $line"done < $FILEecho "$FILE有$i行…

高德地图之获取经纬度并且根据获取经纬度渲染到路线规划

话不多说&#xff0c;直接给兄弟们上干货&#xff0c;修改了好多次&#xff0c;之前都是获取到路线但是无法删除&#xff0c;这次是根据点击的单双判断开始和结束 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv&q…

解读 MySQL 容器信息:`docker inspect` 字段详解

前言 在使用 Docker 时&#xff0c;docker inspect 命令是一个非常有用的工具&#xff0c;它能够返回容器或镜像的详细配置信息和状态。以下是对 docker inspect mysql 命令输出的字段的详细解释&#xff0c;这些信息可以帮助您更好地了解容器的内部工作机制。 容器基础信息 …

回顾Java中的算术运算符、关系运算符和逻辑运算符,并解释下和的区别

一、在Java中&#xff0c;存在多种类型的运算符&#xff0c;包括算术运算符、关系运算符和逻辑运算符。以下是这些运算符的列表和简要说明&#xff1a; 算术运算符 加法运算符 (): 用于将两个操作数相加。减法运算符 (-): 用于从一个操作数中减去另一个操作数。乘法运算符 (*…

【前端】CSS弹性布局 display-flex

一、display-flex弹性布局 Flex&#xff0c;用来为盒装模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。 在父DIV中使用 display: -webkit-flex; /*在webkit内核的浏览器上使用要加前缀*/ display: flex; //将对象作为弹性伸缩盒显示// 沿水平主轴让元素从左向右排…

git中忽略文件的配置

git中忽略文件的配置 一、在项目根目录下创建.gitignore文件二、配置规则如果在配置之前已经提交过文件了&#xff0c;要删除提交过的&#xff0c;如何修改&#xff0c;参考下面的 一、在项目根目录下创建.gitignore文件 .DS_Store node_modules/ /dist# local env files .env…

找一个区间内两个数最大公约数的最大值(24年gdcpc省赛G题)

题目大意就是t组数据,每组一个左右边界l,r,问区间内的两个是xi,yi是区间内max(gcd(xi,yi)),数据范围是1e12. 答案就是找到第一个a*x<b*x(a<b),他们两在l到r之间且x最大,那么x就是答案,可以知道,要使两个数在区间内,那么他们之间的差值要小于min(R-L,[R/2]),[]表示向下取…

【安装】VMware虚拟机安装windows操作系统,VM的相关操作

目录 引出报错&#xff1a;press any key to boot form cd激活调整显示 在VMware上新建虚拟机&#xff0c;并安装Windows1、新建虚拟机2、装载 ISO 镜像3、安装Windows server 20164、开机初始化 虚拟机操作1、虚拟机基本操作2、虚拟机快照3、虚拟机克隆4、VMware Tools 总结 引…

消费增值:国家支持的消费新零售模型

在当下的消费时代&#xff0c;一个全新的概念——消费增值&#xff0c;正逐渐走进大众视野。它不仅仅是一种消费模式&#xff0c;更是一种全新的财富增长途径。那么&#xff0c;消费增值究竟是什么&#xff1f; 首先&#xff0c;消费增值的本质在于将消费行为与投资行为相结合…

大模型日报2024-05-27

大模型日报 2024-05-27 大模型资讯 芝加哥大学研究AI在金融分析中的应用 摘要: 芝加哥大学的研究探索了大型语言模型&#xff08;LLMs&#xff09;在金融分析中的能力。GPT-4等大型语言模型在文本分析、解释和生成方面表现出色。 AI帮助揭示海洋和肠道中病毒的动态 摘要: 病毒在…

无人机技术:倾转旋翼飞行器的关键技术详解

一、总体设计 倾转旋翼飞行器作为一种独特的垂直起降与水平巡航的航空器&#xff0c;其总体设计是关键技术之一。总体设计涵盖了飞行器的整体布局、重量分配、气动性能、机械结构设计等多个方面。在总体设计中&#xff0c;需要充分考虑飞行器的垂直起降、悬停、过渡飞行和水平…

Docker 安装与管理

Docker 是一个开源的应用容器引擎,主要用于在 Linux 和 Windows 中创建、部署和运行应用程序。在本文中,我们将详细介绍如何在 CentOS 7 上安装和管理 Docker。 前提条件 Docker 运行在 CentOS 7 上,需要满足以下条件: 系统为 64 位系统内核版本 3.10 及以上下面是一个示例环…

二分例题(D.负重越野,I.路径规划)

这两天的训练赛都有一道二分的题&#xff0c;但是都没往二分上面想&#xff0c;同样不知道怎么二分。 D. Fast and Fat 思路 二分的关键也就是check函数怎么写了&#xff0c;求队伍最大速度&#xff0c;可以分为速度>mid和<mid两部分&#xff0c;再判断&#xff0c;能不…

流量分析入门

什么是流量分析 通过捕捉网络中流动的数据包&#xff0c;查看里面的数据和协议&#xff0c;流量分析和各种数据的统计来发现网络运行中的问题&#xff0c;在ctf中一般是一个包含流量数据的 PCAP 文件。 [陇剑杯 2021]签到 1.题目问我们正在进行的事什么协议的攻击 2.打开wire…

【ARMv7-A】——WFI(wait for interrupt)

文章目录 WFI基本原理使用场景多任务模型注意事项代码实例linux 内核中的 WFI 指令不使用 WFI 指令使用 WFI 指令WFI WFI 即 Wait for interrupt,常用于低功耗。 WFI (Wait for interrupt) 和 WFE (Wait for event) 是两个让 ARM 核进入 low-power standby 模式的指令,由 A…

【vue与iframe通讯】

vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue & iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言&#xff1a;vue嵌套iframe实现步骤 发送数据…