首页 >> 大全

[labelme] json格式批量转换为mask.png

2023-10-29 大全 22 作者:考证青年

[] json格式批量转换为mask.png

1.使用制作语义分割数据集,生成.json格式文件,将所有放置于一个文件夹下。

2.找到安装位置的.py文件,(可以安装一个软件叫,找东西方便许多)

将代码替换为:

import argparse
import json
import os
import os.path as osp
import warnings
import copy
import numpy as np
import PIL.Image
from skimage import io
import yaml
from labelme import utilsdef main():parser = argparse.ArgumentParser()parser.add_argument('json_file')   # 标注文件json所在的文件夹parser.add_argument('-o', '--out', default=None)args = parser.parse_args()json_file = args.json_filelist = os.listdir(json_file)   # 获取json文件列表for i in range(0, len(list)):path = os.path.join(json_file, list[i])  # 获取每个json文件的绝对路径filename = list[i][:-5]       # 提取出.json前的字符作为文件名,以便后续保存Label图片的时候使用extension = list[i][-4:]if extension == 'json':if os.path.isfile(path):data = json.load(open(path))img = utils.image.img_b64_to_arr(data['imageData'])  # 根据'imageData'字段的字符可以得到原图像# lbl为label图片(标注的地方用类别名对应的数字来标,其他为0)lbl_names为label名和数字的对应关系字典lbl, lbl_names = utils.shape.labelme_shapes_to_label(img.shape, data['shapes'])   # data['shapes']是json文件中记录着标注的位置及label等信息的字段#captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]#lbl_viz = utils.draw.draw_label(lbl, img, captions)out_dir = osp.basename(list[i])[:-5]+'_json'out_dir = osp.join(osp.dirname(list[i]), out_dir)if not osp.exists(out_dir):os.mkdir(out_dir)PIL.Image.fromarray(img).save(osp.join(out_dir, '{}_source.png'.format(filename)))PIL.Image.fromarray(lbl).save(osp.join(out_dir, '{}_mask.png'.format(filename)))#PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, '{}_viz.jpg'.format(filename)))with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:for lbl_name in lbl_names:f.write(lbl_name + '\n')warnings.warn('info.yaml is being replaced by label_names.txt')info = dict(label_names=lbl_names)with open(osp.join(out_dir, 'info.yaml'), 'w') as f:yaml.safe_dump(info, f, default_flow_style=False)print('Saved to: %s' % out_dir)if __name__ == '__main__':main()

3.打开终端,我的是在 中输入命令:

_批量格式转换方法_批量格式转换器

labelme_json_to_dataset F:/2021_1(4-2)/ProjectNet/invoice/json

…/json为所有json问价所在文件夹

则在该目录下每个json文件会生成一个文件夹,包含以下四个文件。

.png即为所需要的图片,图片已经进行了标记,全黑是因为标记的像素值为1,2等与背景黑色0十分接近,肉眼无法辨别,但在中查看,

4.建立.py,运行可将其转化为彩色图片。

import os
from PIL import Imagefilepath=r'F:\2021_1(4-2)\ProjectNet\invoice\json\mask'
total = os.listdir(filepath)
savepath = r'F:\2021_1(4-2)\ProjectNet\invoice\json'num = len(total)
list = range(num)for i in list:filename = total[i][:-4] + '.png'img = os.path.join(filepath, filename)mask = Image.open(img).convert('L')mask.putpalette([0, 0, 0,  # putpalette给对象加上调色板,相当于上色:背景为黑色,目标1为红色,目标2为黄色,目标3为橙色(如果你的图中有更多的目标,可以自行添加更多的调色值)255, 255, 255,255, 255, 0,255, 153, 0])#filename2 = total[i][:-4] + '.png'mask.save(os.path.join(savepath, filename))

其中

为所有全黑的mask文件所在文件夹,

为转换后的彩色图片存储文件夹

因为在两个文件夹内,所以转换后的文件我没改名,如果需要可以改,再save。

ps:每个json文件会生成一个文件夹,_mask.png位于各自的文件夹下,最后要统一放在一个文件夹中,为了调试通代码我只用了几张图片实验,将它们一个个复制过去,此后要是写了统一提取_mask.png并存放于同一文件夹下的代码再贴(0w0)。

参考:

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了