Segnet网络标签为png格式。我们用labelme制作图片分割的标签,得到的为json文件,我们要提取json文件,将json文件转换为png格式的标签文件,并将标签文件提取出来,遇到多类标签,给每类标签赋不同的值。
labelme安装,标签制作,标签批量转化见链接添加链接描述
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文档
感谢Bubbliiiing的博客,了解更多可看b站Bubbliiiing的视频。
版权声明:本文为qq_51110792原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。