python实现将darknet的label标签画到原图上,训练前检查标签

3 篇文章 1 订阅
3 篇文章 1 订阅

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()

参考了这位大佬的文章,链接地址。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值