首先将图像格式及大小、类型、名称 做出调整
这里将 bmp 转为 png 大小统一为 500*500, 按照数字序号命名
bmp_png.py
from PIL import Image
import glob
import os
out_dir = 'D:/图像数据/橙子/TestIMG/'
cnt = 501
for img in glob.glob('D:/图像数据/橙子/测试图像/*.bmp'):
Image.open(img).resize((500,500)).save(os.path.join(out_dir, format(str(cnt), '0>3s') + '.png'))
cnt += 1
json 转 png
json_png.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# !H:\Anaconda3\envs\new_labelme\python.exe
import argparse
import json
import os
import os.path as osp
import base64
import warnings
import PIL.Image
import yaml
from labelme import utils
import cv2
import numpy as np
from skimage import img_as_ubyte
# from sys import argv
def main():
warnings.warn("This script is aimed to demonstrate how to convert the\n"
"JSON file to a single image dataset, and not to handle\n"
"multiple JSON files to generate a real-use dataset.")
json_file = "D:/GPU/labelme/data3/json20201030"
# freedom
list_path = os.listdir(json_file)
print('freedom =', json_file)
for i in range(0, len(list_path)):
path = os.path.join(json_file, list_path[i])
if os.path.isfile(path):
data = json.load(open(path))
img = utils.img_b64_to_arr(data['imageData'])
lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])
captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
lbl_viz = utils.draw_label(lbl, img, captions)
# out_dir = osp.basename(path).replace('.', '_')
out_dir = osp.basename(path).split('.json')[0]
save_file_name = out_dir
# out_dir = osp.join(osp.dirname(path), out_dir)
if not osp.exists(json_file + 'mask'):
os.mkdir(json_file + 'mask')
maskdir = json_file + 'mask'
if not osp.exists(json_file + 'mask_viz'):
os.mkdir(json_file + 'mask_viz')
maskvizdir = json_file + 'mask_viz'
out_dir1 = maskdir
PIL.Image.fromarray(lbl).save(out_dir1 + '/' + save_file_name + '.png')
PIL.Image.fromarray(lbl_viz).save(maskvizdir + '/' + save_file_name +
'_label_viz.png')
with open(osp.join(out_dir1, '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_dir1, 'info.yaml'), 'w') as f:
yaml.safe_dump(info, f, default_flow_style=False)
print('Saved to: %s' % out_dir1)
if __name__ == '__main__':
# base64path = argv[1]
main()
python对比两个目录下的文件名差异, 将有json 文件对应的原始图像单独保存处理,因为有的图像没有json文件
jsonANDpng.py
from PIL import Image
import glob
import os
out_dir = 'D:/图像数据/橙子/GPU/trainIMG/'
in_dir='D:/图像数据/橙子/GPU/SourceIMG/'
i=0
for img in glob.glob('D:/图像数据/橙子/GPU/labelmemask/*.png'):
img=os.path.join(in_dir, os.path.basename(img))
Image.open(img).save(os.path.join(out_dir, os.path.basename(img)))
i=i+1
print(i)