JSON格式转PNG(用于语义分割数据集标签转换)

在这里插入图片描述
在这里插入图片描述
需要将JSON的语义分割标签转换为图片形式的标签

from PIL import Image, ImageDraw
import json
import os
import random


def random_color():
    # 生成一个随机颜色
    return tuple(random.randint(0, 255) for _ in range(3))


def json_to_image(json_path, image_size, label_to_color, mode='L'):
    # 读取JSON文件
    with open(json_path, 'r') as f:
        data = json.load(f)

    # 创建一张空白图像,可以根据需要选择 'L' (灰度图) 或 'P' (8位彩色图)
    image = Image.new(mode, image_size, color='white')
    draw = ImageDraw.Draw(image)

    # 将JSON中的标签信息映射到图像上
    for shape in data['shapes']:
        label = shape['label']
        points = shape['points']

        # 将多边形坐标映射到像素位置
        polygon_points = [(int(point[0]), int(point[1])) for point in points]

        # 获取标签对应的颜色,如果标签不存在于映射中,则生成一个新的颜色
        color = label_to_color.setdefault(label, random_color())

        # 在图像上绘制多边形
        draw.polygon(polygon_points, fill=100)

    return image


def batch_convert(json_folder, image_folder, output_folder, mode='L'):
    # 遍历JSON文件夹中的所有文件
    label_to_color = {}  # 存储标签到颜色的映射
    for json_file in os.listdir(json_folder):
        if json_file.endswith('.json'):
            json_path = os.path.join(json_folder, json_file)

            # 构建对应的图像文件路径
            image_file = os.path.splitext(json_file)[0] + '.jpg'
            image_path = os.path.join(image_folder, image_file)

            # 转换JSON到图像
            result_image = json_to_image(json_path, Image.open(image_path).size, label_to_color, mode)

            # 保存结果图像
            output_path = os.path.join(output_folder, image_file)
            result_image.save(output_path)


if __name__ == "__main__":
    # 设置文件夹路径
    json_folder = 'D:\dataset\\trans\labelmejson'
    image_folder = 'D:\dataset\\trans\png'
    output_folder = 'D:\dataset\\trans\PNGLabel'

    # 批量转换为灰度图
    batch_convert(json_folder, image_folder, output_folder, mode='L')

    # 批量转换为8位彩色图
    #batch_convert(json_folder, image_folder, output_folder, mode='P')

完成

在这里插入图片描述

参考文章

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐