1、首先已经将数据转换成darknet需要的数据格式(.txt文件),文件格式为:类别名、中心点x/原图宽、中心点y/原图高、矩形宽/原图宽、矩形高/原图高,因此对参考文章的部分代码进行了修改。
2、其中cv2.rectangle(img, c1, c2, (0, 0, 255), 2)分别是图片,矩形框左上角坐标,矩形框右下角坐标,矩形框颜色,边框粗细,如果不想看所有图片可以使用if判断条件,提前break,cv2.rectangle需要注意c1,c2必须为整型,不然会报错,以及cv的图片是BGR格式。
3、先是读取原图和生成好的label的地址(图片名需要和label名对应),利用cv2读取图片,再将label画到原图上,将画好的图利用cv2写入,存到一个新的文件夹中。
以下是代码:
import os
import cv2
path = "/media/train/testlabels" #label address
path1 = "/media/train/JPEGImages" #pictures address
path2 = "/media/train/testimage" #drawed pictures address
count = 0
for root, dirs, files in os.walk(path):
for name in files:
if name.endswith(".txt"):
filename = root + "/" + name #/media/train/labels/31801994.txt
filename2 = path2 + "/" + name
file_name = name.split('.')[0] #name = 31801994.txt file_name = 31801994
file_path = path1 + "/" + file_name + ".jpg" #label对应的图片
img = cv2.imread(file_path) #读入图片
h ,w = img.shape[:2]
f = open(filename, "r")
if count > 20:
break
for each_line in f:
each_line_list = each_line.split() # 将每一行的数字分开放在列表中
xmin = (float(each_line_list[1]) - (1/2) * (float(each_line_list[3]))) * w
ymin = (float(each_line_list[2]) - (1/2) * (float(each_line_list[4]))) * h
xmax = (float(each_line_list[1]) + (1/2) * (float(each_line_list[3]))) * w
ymax = (float(each_line_list[2]) + (1/2) * (float(each_line_list[4]))) * h
cls = str(each_line_list[0])
c1, c2 = (int(xmin), int(ymin)), (int(xmax), int(ymax))
cv2.rectangle(img, c1, c2, (0, 0, 255), 2) #左上角,右下角,颜色,边框粗细
cv2.putText(img, cls, c2, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
count += 1
print(count)
cv2.imwrite(path2 + "/" + file_name + ".jpg", img)
f.close()
参考了这位大佬的文章,链接地址。