json文件转换为图片 png格式;单个json文件和文件夹原数据转换为图片格式

import cv2
import numpy as np
from pycocotools.coco import COCO
import os

train_json = r'E:\data\_annotations.coco.json'


def save_segmentation_masks(json_path, img_path, category_name=' '):
    """
    将COCO数据集中指定类别的图像分割掩码保存为PNG格式的标签图。

    参数:
    - json_path (str): COCO JSON注释文件的路径。
    - img_path (str): 图像文件夹路径,用于加载原始图像。
    - category_name (str): 要过滤的类别名称(默认为' '表示所有类别)。
    """
    # 加载COCO数据集的注释
    coco = COCO(json_path)

    # 如果提供了类别名称,则根据类别名称过滤注释
    if category_name != ' ':
        catIds = coco.getCatIds(catNms=[category_name])
    else:
        catIds = []

    # 获取所有图像ID
    imgIds = coco.getImgIds(catIds=catIds)

    # 遍历每个图像并保存分割掩码为PNG
    for idx, imgId in enumerate(imgIds):
        img = coco.loadImgs(imgId)[0]
        annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
        anns = coco.loadAnns(annIds)

        # 加载原始图像
        image = cv2.imread(img_path + img['file_name'])

        # 创建与原始图像相同大小的空白图像
        mask = np.zeros((image.shape[0], image.shape[1]), dtype=np.uint8)

        # 在空白图像上绘制每个分割区域
        for ann in anns:
            if 'segmentation' in ann:
                seg_mask = coco.annToMask(ann)
                mask[seg_mask > 0] = ann['category_id']

        # 保存分割掩码图像为PNG,使用当前索引的文件名作为保存的图像文件名
        output_folder = r'E:\data\1'
        os.makedirs(output_folder, exist_ok=True)
        cv2.imwrite(os.path.join(output_folder, f'{os.path.splitext(os.path.basename(img["file_name"]))[0]}.png'), mask)
        print(os.path.join(output_folder, f'{os.path.splitext(os.path.basename(img["file_name"]))[0]}.png'))

if __name__ == "__main__":
    save_segmentation_masks(train_json, r'E:\data\images\\', 'person')
    '''1.复制图片到E:\data\images 和  json文件到E:\data
       2、运行当前文件生成二值化标签图0和1 '''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值