El archivo json del conjunto de datos de segmentación semántica de Huawei Street View se convierte en etiquetas de etiqueta

Encontré un problema complicado hoy. El conjunto de datos de Street View de segmentación semántica de Huawei es un archivo json, no una imagen de etiqueta que se ha generado. Al principio, no sabía cómo hacerlo. Quería hacerlo a través de la herramienta cityscapesScripts-master del conjunto de datos de paisajes urbanos, pero no obtuve ningún resultado durante mucho tiempo.

Por eso quiero hacer el mío sin ruedas. . . . . . Uh uh uh, incómodo

Si miras la imagen de abajo sin más preámbulos, encontrarás que, de hecho, el archivo json es un diccionario. Lo más importante en la personalización es lo que está en el cuadro rojo, que contiene las coordenadas del vértice del polígono cerrado circunscrito. de cada objeto . Si no lo entiende Lea esta oración varias veces. Nuestro objetivo es generar una imagen para que estas áreas encerradas se llenen con los valores objetivo correspondientes.

De hecho, cada coordenada de vértice de cada objeto aquí se conecta para formar un contorno, luego el problema se transforma en el problema de colorear dentro del contorno. Así que esto es simple. Se puede lograr fácilmente usando la función fillPoly de opencv. Cómo usar Baidu para cv2 .fillPoly, no hablaré de eso aquí.

Primero tenemos que analizar el archivo json y luego analizar el valor que se debe completar para cada objeto. Luego genere una matriz 0 correspondiente y finalmente complete el valor correspondiente en el esquema correspondiente de la matriz 0. el código se muestra a continuación:

import numpy as np
import matplotlib.pyplot as plt
import cv2
import json
import glob

_json = glob.glob('./gtFine/*/*/*.json')   # 所有json文件

# 不同类别的物体对应的值
name_dict = {'flat': 0,
             'human': 1,
             'vehicle': 2,
             'construction': 3,
             'object': 4,
             'nature': 5,
             'sky': 6}
for j in _json:
    with open(j, 'r') as f:
        r = f.read()
    r = json.loads(r)
    obj = r['objects']

    # 0数组 ,这里的3通道是我按照cityscapes的方式保存的
    # 其实三个通道两两相等

    img = np.zeros((1024,2048,3))
    
    # 填充
    for i in obj:
        name = i['label']
        po = i['polygon']
        n = name_dict[name]
        cv2 .fillPoly(img,pts = [np.array(po)],color =(n,n,n))

    # 保存
    cv2.imwrite(j[:-4]+'png', img)

Las representaciones son las siguientes:

   

Supongo que te gusta

Origin blog.csdn.net/qq_39197555/article/details/112155822
Recomendado
Clasificación