Lip人体分割相关数据集解析、可视化 - python 实现
代码具体实现如下:
# -*-coding:utf-8-*-
# date:2024-10
# Author: DataBall - XIAN
# Function: lip 数据集解析可视化
import os
import cv2
import random
import numpy as np
import time
'''
'lip': {
'input_size': [473, 473],
'num_classes': 20,
'label': ['Background', 'Hat', 'Hair', 'Glove', 'Sunglasses', 'Upper-clothes', 'Dress', 'Coat',
'Socks', 'Pants', 'Jumpsuits', 'Scarf', 'Skirt', 'Face', 'Left-arm', 'Right-arm',
'Left-leg', 'Right-leg', 'Left-shoe', 'Right-shoe']
}
'''
def resize_img_keep_ratio(img, target_size):
old_size = img.shape[:2] # 原始图像大小
ratio = min(target_size[i] / old_size[i] for i in range(len(old_size))) # 计算比例
new_size = tuple(int(i * ratio) for i in old_size) # 计算新的图像大小
img = cv2.resize(img, (new_size[1], new_size[0])) # 调整图像大小
pad_w = target_size[1] - new_size[1] # 计算宽度填充
pad_h = target_size[0] - new_size[0] # 计算高度填充
top, bottom = pad_h // 2, pad_h - (pad_h // 2)
left, right = pad_w // 2, pad_w - (pad_w // 2)
img_new = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=(200,200,200)) # 边缘填充
return img_new
if __name__ == '__main__':
path_ = "D:/LIP/TrainVal_images/train_images/"
path_ano = "D:/LIP/TrainVal_parsing_annotations/TrainVal_parsing_annotations/train_segmentations/"
color_list = []
for i in range(20):
if i == 0:
RGB = (0,0,0)
elif i == 1:
RGB = (255,0,0)
elif i == 2:
RGB = (128,128,0)
elif i == 3:
RGB = (0,255,0)
elif i == 4:
RGB = (255,0,255)
elif i == 5:
RGB = (255,0,130)
elif i == 6:
RGB = (0,0,230)
elif i == 7:
RGB = (20,80,230)
elif i == 8:
RGB = (130,55,20)
elif i == 9:
RGB = (180,10,120)
else:
RGB = (random.randint(60,225),random.randint(60,225),random.randint(60,225))
color_list.append(RGB)
for f_ in os.listdir(path_):
img = cv2.imread(path_ + f_)
img_ano = cv2.imread(path_ano + f_.replace(".jpg",".png"))
mask = np.zeros(img.shape).astype(np.uint8)
for i in range(20):
v_idx = np.where(img_ano==i)
if len(v_idx[0]):
mask[v_idx[0],v_idx[1]] = color_list[i]
print("f_:",f_)
img = resize_img_keep_ratio(img, [512,512])
mask = resize_img_keep_ratio(mask, [512,512])
stk = np.hstack((img,mask))
cv2.namedWindow("stk",0)
cv2.imshow("stk",stk)
if cv2.waitKey(1)==27:
break
执行可视化示例如下:
助力快速掌握数据集的信息和使用方式。
数据可以如此美好!