yolov5的数据集图片显示标签代码,颜色代码按照是yolov5官方代码中的
读取和显示yolov5格式的数据集
import cv2
import os
from tqdm import tqdm
class Colors:
def __init__(self):
hexs = ('FF3838', 'FF9D97', 'FF701F', 'FFB21D', 'CFD231', '48F90A', '92CC17', '3DDB86', '1A9334', '00D4BB',
'2C99A8', '00C2FF', '344593', '6473FF', '0018EC', '8438FF', '520085', 'CB38FF', 'FF95C8', 'FF37C7')
self.palette = [self.hex2rgb(f'#{c}') for c in hexs]
self.n = len(self.palette)
def __call__(self, i, bgr=False):
c = self.palette[int(i) % self.n]
return (c[2], c[1], c[0]) if bgr else c
@staticmethod
def hex2rgb(h):
return tuple(int(h[1 + i:1 + i + 2], 16) for i in (0, 2, 4))
colors = Colors()
def draw_box_in_single_image(image_path, txt_path, img_save_path, labels):
image = cv2.imread(image_path)
def read_list(txt_path):
pos = []
with open(txt_path, 'r') as file_to_read:
while True:
lines = file_to_read.readline()
if not lines:
break
pass
p_tmp = [float(i) for i in lines.split(' ')]
pos.append(p_tmp)
pass
return pos
def convert(size, box):
xmin = (box[1]-box[3]/2.)*size[1]
xmax = (box[1]+box[3]/2.)*size[1]
ymin = (box[2]-box[4]/2.)*size[0]
ymax = (box[2]+box[4]/2.)*size[0]
box = (int(xmin), int(ymin), int(xmax), int(ymax))
return box
pos = read_list(txt_path)
for i in range(len(pos)):
label = labels[int(pos[i][0])]
box = convert(image.shape, pos[i])
p1, p2 = (box[0], box[1]),(box[2],box[3])
w, h = cv2.getTextSize(label, 0, fontScale=1, thickness=2)[0]
outside = p1[1] - h >=3
p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3
cv2.rectangle(image, p1, p2, colors(int(pos[i][0]), True), -1, cv2.LINE_AA)
image = cv2.rectangle(image,(box[0], box[1]),(box[2],box[3]),colors(int(pos[i][0]), True),1)
cv2.putText(image, str(label), (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), 0, 1, (255, 255, 255), thickness=2, lineType=cv2.LINE_AA)
pass
cv2.imwrite(img_save_path, image)
if __name__ == '__main__':
img_folder = "./val/images"
img_list = os.listdir(img_folder)
img_list.sort()
label_folder = "./val/labels"
label_list = os.listdir(label_folder)
label_list.sort()
img_save_folder = './val/img_save'
if not os.path.exists(img_save_folder):
os.makedirs(img_save_folder)
labels = {0: 'flame', 1: 'smoke'}
for i in tqdm(range(len(img_list))):
image_path = img_folder + "/" + img_list[i]
txt_path = label_folder + "/" + label_list[i]
img_save_path = img_save_folder + "/" + img_list[i]
draw_box_in_single_image(image_path, txt_path, img_save_path, labels)
显示结果
![火灾图片](https://img-blog.csdnimg.cn/direct/5c2f06f134b940ab9025751ec942d193.jpeg#pic_center)