标签清洗/查看像素数量

import os
import random
import numpy as np
from PIL import Image
from tqdm import tqdm


if __name__ == "__main__":
    random.seed(0)
#_________________标签地址_________________________#
    labpath = r'F:\zj\sea1\lab'
#——————————————————————————————————————————————-——#

    temp_seg = os.listdir(labpath)
    total_seg = []
    for seg in temp_seg:
        if seg.endswith(".png"):     #根据标签格式修改
            total_seg.append(seg)
            # print(total_seg)
        num = len(total_seg)
        list = range(num)

print("检查数据集格式是否符合要求,这可能需要一段时间。")

classes_nums = np.zeros([256], np.int)
for i in tqdm(list):
    name = total_seg[i]
    lab_file_name = os.path.join(labpath, name)
    if not os.path.exists(lab_file_name):
        raise ValueError("未检测到标签图片%s,请查看具体路径下文件是否存在以及后缀是否为png。" % (lab_file_name))

    png = np.array(Image.open(lab_file_name), np.uint8)
    if len(np.shape(png)) > 2:
        print("标签图片%s的shape为%s,不属于灰度图或者八位彩图,请仔细检查数据集格式。" % (name, str(np.shape(png))))
        print("标签图片需要为灰度图或者八位彩图,标签的每个像素点的值就是这个像素点所属的种类。" % (
            name, str(np.shape(png))))

    classes_nums += np.bincount(np.reshape(png, [-1]), minlength=256)

print("打印像素点的值与数量。")
print('-' * 37)
print("| %15s | %15s |" % ("Key", "Value"))
print('-' * 37)
for i in range(256):
    if classes_nums[i] > 0:
        print("| %15s | %15s |" % (str(i), str(classes_nums[i])))
        print('-' * 37)

if classes_nums[255] > 0 and classes_nums[0] > 0 and np.sum(classes_nums[1:255]) == 0:
    print("检测到标签中像素点的值仅包含0与255,数据格式有误。")
    print("二分类问题需要将标签修改为背景的像素点值为0,目标的像素点值为1。")
    print("多分类问题需要将标签修改为背景的像素点值为0,目标的像素点值为从1递增。")

elif classes_nums[0] > 0 and np.sum(classes_nums[1:]) == 0:
    print("检测到标签中仅仅包含背景像素点,数据格式有误,请仔细检查数据集格式。")

你可能感兴趣的:(小工具,python,numpy,开发语言)