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

news2024/9/22 13:43:39

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

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

import os
import cv2
import numpy as np
import shutil

def 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 != '':
            continue
        print(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)) # 获取x
                    obj.append(str(point[0][1] * 1.0 / h)) # 获取y
                contoursNorm.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
        # 写入txt
        realName = 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':
            # 原图像
            # 移动到oridata
            source_path = imPath
            destination_path = 'data\\oridata\\' + im
            shutil.copy(source_path, destination_path)
        if im.split('.')[-1] == 'png':
            # mask label
            # 移动到maskdata
            source_path = imPath
            destination_path = 'data\\maskdata\\' + im
            shutil.copy(source_path, destination_path)


if __name__ == '__main__':
    img2label(
        imgPath='data\\maskdata\\',  # maskdata 保存着标签图像
        labelPath='data\\lab\\',     # lab 保存这yolo格式的标签文件
        imgbjPath = 'data\\bj\\',    # bj 保存着标记好边界的图像
        seletName='')

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

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

相关文章

【高阶数据结构】二叉树的创建、存储方式(顺序与链式)、遍历方法(递归与非递归)(精美图解+完整代码)

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《高阶数据结构》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多《高阶数据结构》点击专栏链接查看&a…

单体到微服务:架构变迁

单体架构与微服务架构&#xff1a;从单体到微服务的演变 引言单体架构概述微服务架构的优势一、功能定位二、使用场景三、配置方式四、性能特点Eureka - 服务注册与发现框架核心功能工作原理优势应用场景 结论 引言 在软件开发的世界中&#xff0c;随着业务的增长和技术的发展…

RabbitMQ 基础架构流程 数据隔离 创建用户

介绍 publisher&#xff1a;消息发送者-exchange&#xff1a;交换机&#xff0c;复制路由的消息-queue&#xff1a;队列&#xff0c;存储消息consumer&#xff1a;消息的消费者 工作流程 publisher消息发送者 -> exchange 交换机 -> queue 队列 -> consumer 消息的消…

关于CUDA版本查看的问题

显卡驱动安装成功后&#xff0c;通过nvidia-smi命令查看显卡信息 右上角显示的CUDA Version&#xff1a;12.1并非本机的 CUDA 版本&#xff0c;而是 GPU 最高支持的 CUDA 版本&#xff0c;本机安装的CUDA版本不能高于GPU最高支持的版本。 通过nvcc --version查看到的版本才是本…

SprinBoot+Vue图书管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

MapBox Android版开发 3 地图样式v11

MapBox Android版开发 3 地图样式v11 前言MapBox样式对比主要类和方法Style类Style类默认的MapBox样式OnStyleLoaded 接口 MapboxMap类获取样式设置样式 本地化扩展 示例代码地图样式类界面布局控件响应事件运行效果图 附不同样式中的图层 前言 可以使用Mapbox Maps SDK自定义…

LLM大模型教程:低使用门槛开源大模型服务框架Ollama

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——Ollama。 项目介绍 Ollama 是一个开源的大语言模型&#xff08;LLM&#xff09;服务工具…

平价运动耳机推荐有哪些?业界五大爆款推荐!

近两年&#xff0c;开放式蓝牙耳机的热度可以说是不断提高&#xff0c;相较于一般的蓝牙耳机&#xff0c;开放式蓝牙耳机因为不需要入耳&#xff0c;对于耳道狭小或者耳道敏感的人群比较友好&#xff0c;能够避免耳道不适、中耳炎等&#xff0c;长时间佩戴更舒适&#xff0c;适…

【一嗨租车-注册安全分析报告-滑动验证加载不正常导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

大模型时代,开发者怎么办

随着ChatGPT的出圈&#xff0c;基于大模型开发的应用也不断涌现&#xff0c;不管是不是相关方向的从业人员&#xff0c;在这一年多总能听到很多新名词&#xff0c;从LLM、Prompt、RAG到Fine-tuning、Agent&#xff0c;各个大企业都在讲All in AI&#xff0c;一些技术会议也明显…

Massive Exploration of Neural Machine Translation Architectures论文解读

基本信息 作者D Britzdoi发表时间2017期刊EMNLP网址https://arxiv.org/abs/1703.03906v1 研究背景 1. What’s known 既往研究已证实 神经机器翻译NMT是一种自动翻译的端到端方法&#xff08;Neural Machine Translation by Jointly Learning to Align and Translate论文里的…

Gartner《2024中国安全技术成熟度曲线》AI安全助手代表性产品:开发者安全助手D10

海云安关注到&#xff0c;近日&#xff0c;国际权威研究机构Gartner发布了《2024中国安全技术成熟度曲线》(Hype Cycle for Security in China,2024)报告。 在此次报告中&#xff0c;安全技术成熟度曲线将安全周期划分为技术萌芽期&#xff08;Innovation Trigger&#xff09;…

快捷开发技巧-idea如何提取代码成方法

1.首选选中要抽取的代码段 2.右键选择Refactor->Extract Method 3.调整方法名称 4.回车保存

Find My资讯|腾势联名九号推出F2 升级版电动滑板车,支持苹果Find My功能

比亚迪腾势与九号电动推出的联名电动滑板车 F2 升级版已在腾势商城上架&#xff0c;该车支持苹果“Find My”查找功能&#xff0c;续航里程 40 公里&#xff0c;售价为 2999 元。 该车配备 30 毫米双筒减振&#xff0c;采用 10 英寸自修复果冻胎&#xff0c;拥有前碟刹 后 E…

改变地址栏的网址链接路径或传参,不刷新当前网页页面

window.history.replaceState(null, null, "/网址后面的路径?参数参数值1");window.history.replaceState(null, null, "./当前路径保留?参数参数值1");

linux 系统中关于文件压缩效率/压缩比的说明

前言 tar.gz&#xff08;或tgz&#xff09;格式是Linux中常用的压缩格式&#xff0c;它结合了tar的打包功能和gzip的压缩功能。根据搜索结果&#xff0c;tar.gz格式在压缩比率、压缩和解压速度上取得了较好的平衡。 在一项测试中&#xff0c;一个大约23GB的目录使用tar.gz格式…

win7一键修复所有dll缺失!全面介绍电脑DLL文件丢失修复过程!

在Windows 7操作系统中&#xff0c;DLL&#xff08;动态链接库&#xff09;文件扮演着至关重要的角色。它们是Windows系统和其他应用程序正常运行所必需的组件。然而&#xff0c;由于各种原因&#xff0c;如系统更新不当、软件卸载不完全或恶意软件攻击&#xff0c;DLL文件可能…

线性结构队列栈知识点(软件设计师)

线性结构 1.线性表2.线性表存储结构顺序存储链式存储 3.栈4.队列5.串 1.线性表 线性表是最简单、最基本的数据结构。线性表常采用顺序存储和链式存储&#xff0c;主要的基本操作是插入、删除和查找等 2.线性表存储结构 顺序存储 插入、删除 移动元素查找时间复杂度O(1) 可以随…

极简的go语言channel入门

写在文章开头 很久没写go语言相关的文章了&#xff0c;近期准备整理整理go语言channel相关的知识点&#xff0c;而本文将通过几个示例快速带读者了解channel的基本概念&#xff0c;希望对你有帮助。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 ja…

Vue笔记总结(Xmind格式):第六天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; 动态组件 1.组件中name属性的作用 递归组件:一个组件要用自己的时候&#xff0c;可以通过自己的名字来使用自己。 2.组件缓存 组件切换会导致组件被频繁销毁和重新创建, 所以性能不高,Vue内置的keep-alive组件包起来要频繁切…