图像分割标签制作,json批量转为png标签 ,用于训练

Segnet网络标签为png格式。我们用labelme制作图片分割的标签,得到的为json文件,我们要提取json文件,将json文件转换为png格式的标签文件,并将标签文件提取出来,遇到多类标签,给每类标签赋不同的值。

labelme安装,标签制作,标签批量转化见链接添加链接描述
a,得到json文件夹列表
a,得到json文件夹列表
a其中一个json文件夹内的文件a其中一个json文件夹内的文件

label_names里边的为标签的分类,我们需要的标签label。
接下来就是把label提取出来,并给他重命名为文件夹的名,如9_449.png
再把它放入png文件夹中
将下边代码中 #¥¥提到的文件对应修改,在pycharm运行
1内包含原始图片和json
1,1_2,jpg(为空),png(为空)文件夹 和下面的程序文件在同一个文件夹下

下面展示一些 内联代码片

import os
from PIL import Image
import numpy as np
import traceback
def main():
    count = os.listdir("./1/")    # ¥¥ 文件夹1存放原始图片
    print(count)
    for i in count:
        # 如果文件以jpg结尾,找到对应的png
        print(i)
        if i.endswith("jpg"):
            path = os.path.join("./1",i)
            img = Image.open(path)
            img.save(os.path.join("./jpg",i))
            # 找到对应的png
            path = "./1_2/"+i.split(".")[0]+"_json/label.png"    #¥¥文件夹1_2  存放批量转换后放_json,a 
            img = Image.open(path)
            # 找到全局的类
            calss_txt = open("./1/class_name.txt","r")   # ¥¥ 提前在1文件夹下建立class_name.txt文件,每行列标签类别
            class_name = calss_txt.read().splitlines()
            # ["bk","White_line","Lane"]
            # 打开json文件里边存在的类,称为局部类
            try:
                with open("./1_2/"+i.split(".")[0]+"_json/label_names.txt","r") as f:
                    names = f.read().splitlines()
                    # [bk,white_line]
                    new = Image.new("RGB", [np.shape(img)[1], np.shape(img)[0]])
                    # print("names", names)
                    # print("new", new)
                    for name in names:
                        # index json 里边是json里边的类,局部类
                        index_json = names.index(name)
                        # index all 全局类
                        # print(index_json)
                        index_all = class_name.index(name)
                        # 将局部类转换为全局类
                        # print("index_all",index_all)
                        new = new + np.expand_dims(index_all * (np.array(img) == index_json), -1)
                        # print("new1",new)
                    new = Image.fromarray(np.uint8(new))
                    new.save(os.path.join("./png", i.replace("jpg", "png")))  # ¥¥ 提前建立文件夹 名为png
                    print(np.max(new), np.min(new))
            except :

                print("PIL.UnidentifiedImageError",i)
            else:
                continue
if __name__=="__main__":
    main()

获得训练txt文档

下面展示一些 内联代码片

import os

jpgs = os.listdir("./jpg")
pngs = os.listdir("./png")

with open("train_data.txt","w") as f:
    for jpg in jpgs:
        png = jpg.replace("jpg","png")
        if png in pngs:
            f.write(jpg+";"+png+"\n")

在这里插入图片描述标签图

训练TXT文档

训练TXT文档

感谢Bubbliiiing的博客,了解更多可看b站Bubbliiiing的视频。


版权声明:本文为qq_51110792原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。