将语义分割的标签转换为实例分割(yolo)的标签

2024-09-03 02:20

本文主要是介绍将语义分割的标签转换为实例分割(yolo)的标签,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

语义分割的标签(目标处为255,其余处为0)
在这里插入图片描述
实例分割的标签(yolo.txt),描述边界的多边形顶点的归一化位置
在这里插入图片描述
绘制在原图类似蓝色的边框所示。
在这里插入图片描述

废话不多说,直接贴代码;

import os
import cv2
import numpy as np
import shutildef img2label(imgPath, labelPath, imgbjPath, seletName):# 检查labelPath文件夹是否存在if not os.path.exists(labelPath):os.makedirs(labelPath)if not os.path.exists(imgbjPath):os.makedirs(imgbjPath)imgList = os.listdir(imgPath)for imgName in imgList:# 筛选if imgName.split('_')[0] != seletName and seletName != '':continueprint(imgName)img = cv2.imread(imgPath + imgName, cv2.IMREAD_COLOR)h, w, _ = img.shape# print(h, w)GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #图片灰度化处理ret, binary = cv2.threshold(GrayImage,40,255,cv2.THRESH_BINARY) #图片二值化,灰度值大于40赋值255,反之0# ret, binary = cv2.threshold(binary, 80, 255, cv2.THRESH_BINARY_INV)    # (黑白二值反转)cv2.imwrite(r'denoisedfz.png', binary) #保存图片# 腐蚀# kernel = np.ones((3,3),np.uint8) # binary = cv2.erode(binary,kernel,iterations = 3)thresholdL = h/100 * w/100   #设定阈值thresholdH = h/1 * w/1   #设定阈值#cv2.fingContours寻找图片轮廓信息"""提取二值化后图片中的轮廓信息 ,返回值contours存储的即是图片中的轮廓信息,是一个向量,内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓,有多少轮廓,向量contours就有多少元素"""contours,hierarch=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_TC89_L1)contoursNorm = []objs= []# print(contours)for i in range(len(contours)):area = cv2.contourArea(contours[i]) #计算轮廓所占面积# print(area)if area > thresholdL and area < thresholdH:obj = ['0']for point in contours[i]:obj.append(str(point[0][0] * 1.0 / w)) # 获取xobj.append(str(point[0][1] * 1.0 / h)) # 获取ycontoursNorm.append(contours[i])objs.append(obj)# print(objs[10])# 查看效果cv2.drawContours(img, contoursNorm, -1,(255,0,0),2)cv2.imwrite(imgbjPath+imgName, img) #保存图片if len(objs) == 0:print('不保存标签,跳过!')continue# 写入txtrealName = imgName.split('-l')[0]f=open(labelPath + realName + '.txt',"w")for obj in objs:f.writelines(' '.join(obj))f.writelines('\n')f.close()# break# oridata 保存着原图像
# maskdata 保存着标签图像
# lab 保存这yolo格式的标签文件
# bj 保存着标记好边界的图像def OrganizeImages(path):imgs = os.listdir(path)for im in imgs:imPath = os.path.join(path, im)if im.split('.')[-1] == 'jpg':# 原图像# 移动到oridatasource_path = imPathdestination_path = 'data\\oridata\\' + imshutil.copy(source_path, destination_path)if im.split('.')[-1] == 'png':# mask label# 移动到maskdatasource_path = imPathdestination_path = 'data\\maskdata\\' + imshutil.copy(source_path, destination_path)if __name__ == '__main__':img2label(imgPath='data\\maskdata\\',  # maskdata 保存着标签图像labelPath='data\\lab\\',     # lab 保存这yolo格式的标签文件imgbjPath = 'data\\bj\\',    # bj 保存着标记好边界的图像seletName='')

这篇关于将语义分割的标签转换为实例分割(yolo)的标签的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131747

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };