最近在尝试用unet来做一些分割实验,在数据处理过程中进行数据格式转换的时候遇到了一个问题:用labelme标注完原始的jpg图片后产生了json文件,但是在运行程序进行数据格式转换时程序一直报错。
程序内容:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
from __future__ import print_function
import argparse
import glob
import math
import json
import os
import os.path as osp
import shutil
import numpy as np
import PIL.Image
import PIL.ImageDraw
import cv2
def json2png(json_folder, png_save_folder):
if osp.isdir(png_save_folder):
shutil.rmtree(png_save_folder)
os.makedirs(png_save_folder)
json_files = os.listdir(json_folder)
for json_file in json_files:
json_path = osp.join(json_folder, json_file)
os.system("labelme_json_to_dataset {}".format(json_path))
label_path = osp.join(json_folder, json_file.split(".")[0] + "_json/label.png")
png_save_path = osp.join(png_save_folder, json_file.split(".")[0] + ".png")
label_png = cv2.imread(label_path, 0)
label_png[label_png > 0] = 255
cv2.imwrite(png_save_path, label_png)
# shutil.copy(label_path, png_save_path)
# break
if __name__ == '__main__':
# !!!!你的json文件夹下只能有json文件不能有其他文件
json2png(json_folder="data/json", png_save_folder="data/label")
报错内容:
TypeError: '>' not supported between instances of 'NoneType' and 'int'
起初根据报错内容我一直以为是代码中的这两行有问题,label_png是None型的,0是int型的,两者无法用>号进行比较。
label_png = cv2.imread(label_path, 0)
label_png[label_png > 0] = 255
但是尝试了很多别人的方法,也一直行不通。
后来问了我的导师才知道是标注后的json文件有问题,我导师给出的回复是:第一个json标注文件有一个标注只有一个point,无法确定一个封闭区间,去掉那个标注后,程序可以正常执行。
但是我还是很疑惑他是怎么知道有一个json标注文件的一个标注只有一个point这件事的,我也不太好意思再继续追问我们导师,有没有网友能帮我解答一下?