使用VIA标注工具生成的json格式文件转换为png格式的数据标签

本文介绍如何使用Python将VGGImageAnnotator(VIA)的JSON标注文件转换为PNG格式,适用于语义分割任务。通过解析JSON文件中的坐标信息,利用skimage绘制轮廓并填充颜色,最终生成PNG标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VGG Image Annotator (VIA)是一款快速,简单的目标检测标注工具,官方网址:VIA标注工具
这款标注工具将所有标注的图片信息存储在一个json文件中,做语义分割通常的标签需要png或者jpg格式的图片。因此需要把json文件转换成png格式。

注意在使用VIA标注完成后,需要保存整个工程文件为json文件。点击project-->save

实现代码如下:
 

import os
import numpy as np
import cv2 as cv
import json
import skimage
dataset_dir="/home/fcc/crack_via_label"
subset="spalling"
json_path="spalling.json"
output_path = "/home/fcc/crack_via_label/spalling_label/"
dataset_dir = os.path.join(dataset_dir, subset)
# We mostly care about the x and y coordinates of each region
annotations = json.load(open(os.path.join(dataset_dir, json_path)))#加载json文件
#json文件中字典嵌套字典,字典嵌套列表。为了取到关键的x,y点的数据,得一一层把字典,列表剥开。
annotations = list(annotations.values())
annotations_point=annotations[1]
annotations_point=list(annotations_point.values())

annotations_point = [a for a in annotations_point if a['regions']]

for i in range(len(annotations_point)):#遍历每一张图的信息

    filename=annotations_point[i]['filename']
    mask = np.zeros([608, 608, 3],dtype=np.uint8)#设置输出图片维度大小
    for j in range(len(annotations_point[i]['regions'])):#一张图可能存在多个标注区域
#json文件中字典嵌套字典,字典嵌套列表。为了取到关键的x,y点的数据,得一一层把字典,列表剥开。
        point = annotations_point[i]['regions'][j].values()[0]
        point_x=point['all_points_x']#提取x点数据
        point_y=point['all_points_y']#提取y点数据
        rr, cc = skimage.draw.polygon(point_y, point_x)#绘制轮廓,得到轮廓内所有点的坐标
        mask[rr, cc, 0] = 255#填充颜色,255 0 0:蓝色;0 255 0:绿色;0 0 255:红色
    #cv.imshow("mask_"+filename,mask)#调试时显示查看
    #cv.waitKey(0)
    cv.imwrite(output_path+filename,mask)#保存png格式标签

输出结果示例如下:

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值