json文件转png图片(批量转换/图片命名/迁移/改像素值)【tips】

您所在的位置:网站首页 jason怎么读语音 json文件转png图片(批量转换/图片命名/迁移/改像素值)【tips】

json文件转png图片(批量转换/图片命名/迁移/改像素值)【tips】

#json文件转png图片(批量转换/图片命名/迁移/改像素值)【tips】| 来源: 网络整理| 查看: 265

 一.代码

准备:含有众多json文件的文件夹

使用:代码中json_folder处写json文件夹地址(‘/’符号注意保留),png_folder处写png文件夹地址。

效果:json_folder文件夹包含批量生成的json文件夹,内部少了label.png图片,png_folder文件夹包含命名/改完像素(指改成单通道灰度图,像素值只有255和0)的png文件。

import os import shutil import numpy as np import cv2 from PIL import Image #json文件展开(转换) json_folder = '/' json_name = os.listdir(json_folder) os.system("activate labelme") for i in range(len(json_name)): if(os.path.splitext(json_name[i])[1] == ".json"): json_path = json_folder + json_name[i] os.system("labelme_json_to_dataset " + json_path) #json到png的批量命名/转移 png_folder= '' os.makedirs(png_folder,exist_ok=True) i = 1 for name in json_name: if os.path.isdir(json_folder + name): if i < 10: # 0-9 newname = "00" + str(i) + '.png' elif i > 9 and i < 100: # 10-100 newname = "0" + str(i) + '.png' elif i > 99 and i < 1000: # 100-1000 newname = str(i) + '.png' i += 1 os.chdir(json_folder + name) old_name = 'label.png' os.rename(old_name, newname) shutil.move(json_folder + name + "/" + newname, png_folder) #改像素值 png_name = os.listdir(png_folder) for name in png_name: data_source = cv2.imread(png_folder +'/'+ name) data = np.array(data_source) img_path = png_folder + '/' + name for i in range(data[:, :, 0].shape[0]): for j in range(data[:, :, 0].shape[1]): if data[:, :, 2][i][j] > 0 : data[:, :, 2][i][j] = 255 #Red data[:, :, 1][i][j] = 255 #Green data[:, :, 0][i][j] = 255 #Blue cv2.imwrite(img_path , data) png = Image.open(img_path).convert('L').save(img_path) 二.解释 前言

我在做论文复现将其他数据集应用到该篇论文时,数据集缺少了分割时使用的真值图。所以使用labelme做好真值标签生成json文件,还需要将其转换成代码能够使用的png格式真值图,其中遇到的一些功能问题做了整合(我只是知识的缝合怪,参考博文在文末)。

1.json文件激活

labelme生成的json文件需要激活生成文件夹,内含四个文档。

2.转换/命名/迁移

四个文档中png格式的图片对我们是有用的,所以将每个json文件夹里的png提取到一个文件夹,完成转换。

由于是做分割的测试任务,用到原图和真值图的逐像素对比,需要两图一一对应。所以对图像命名也有相应规范,便于后续代码里sorted函数做排序,代码采用如下的命名格式(eg:000,010,200)。

3.修改像素值

经上述操作得到的是红色的真值图,需要将其转换为单通道的灰度图。这里使用逐通道修改像素值再转换为灰度图的方式,逻辑上复杂了一点,但也提供了不同通道修改像素值的思路。

4.检查

img_path处写要看的图片地址,放大查看像素值,发现是单通道的灰度图则成,注意cv2.imread里的cv2.IMREAD_UNCHANGED要放置,否则灰度图也会被查看为RGB图。

import cv2 img_path = '' img = cv2.imread(img_path,cv2.IMREAD_UNCHANGED) cv2.imshow('photo',img) key = cv2.waitKey(0) 参考

1.批量转换/迁移

用python3脚本把labelme的json格式文件转png/xml格式文件_pyyniffler的博客-CSDN博客_json转png脚本

2.改像素值

python-修改图像的尺寸和RGB三个通道的像素值(opencv)_哗啦呼啦嘿的博客-CSDN博客_python修改图像像素大小对文件夹下所有灰度图片进行像素值的修改_神晟的光辉的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3