首先将图像格式及大小、类型、名称 做出调整
这里将 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)
该博客介绍了三个Python脚本,分别用于将BMP图像转换为统一大小的PNG,将JSON标注文件转换为PNG图像和标签,并对比两个目录下文件的差异。脚本实现了图像格式转换、尺寸调整、命名规则和数据集创建。同时,它检查了具有JSON注释的原始图像并保存了它们。
753

被折叠的 条评论
为什么被折叠?



