YOLOv5输出检测到的边界框的坐标、类别以及置信度

文章讲述了在复现某算法过程中,如何利用detect.py中的plot_one_box函数获取并显示预测边界框的坐标。通过修改代码,不仅能在图像上画出边界框,还能将坐标输出到.txt文件,并打印置信度。坐标输出时要注意YOLO中y轴的方向。
摘要由CSDN通过智能技术生成

由于近期对某算法进行复现,需要用到预测的边界框坐标信息,在网上查找之后发现一个可以用的,具体如下(本人版本是v5.0):

在detect.py中找到plot_one_box,大概在113行,可按ctrl+F进行查找

                # Write results
                for *xyxy, conf, cls in reversed(det):
                    if save_txt:  # Write to file
                        xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()  # normalized xywh
                        with open(txt_path + '.txt', 'a') as f:
                            f.write(('%g ' * 5 + '\n') % (cls, *xywh))  # label format

                    if save_img or view_img:  # Add bbox to image
                        label = '%s %.2f' % (names[int(cls)], conf)
                        plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)

ctrl+鼠标左键点击,会跳转到plot.py,并进入该函数。将该函数修改为:

def plot_one_box(x, img, color=None, label=None, line_thickness=None):
    # Plots one bounding box on image img
    tl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1  # line/font thickness
    color = color or [random.randint(0, 255) for _ in range(3)]
    c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3]))
    cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)
    print("左上点的坐标为:(" + str(c1[0]) + "," + str(c1[1]) + "),右下点的坐标为(" + str(c2[0]) + "," + str(c2[1]) + ")")

此时不出意外,应该能够输出预测边界框的坐标:

原图:

 输出坐标:

 如果需要将输出的坐标写进.txt文件方便后续操作,可定义一个写入文件的函数:
 

def write_coordinates_to_file(c1, c2):
    # 打开文件,并使用 'a' 模式表示追加写入
    with open('coordinates.txt', 'a') as file:
        # 将坐标转换为字符串,并使用制表符分隔
        line = '\t'.join(str(c) for coord in (c1, c2) for c in coord)
        # 将形成的一行写入文件
        file.write(line + '\n')  # 添加换行符

然后在plot_one_box函数中添加一行write_coordinates_to_file(c1, c2)即可,坐标会被写进一个coordinates文件。

 若想输出坐标和置信度,则在plot.py中的plot_one_box函数中,if lable:语句末尾加上print(lable)即可

这样预测边界框的坐标、类别、置信度都有了直观的输出

注意:由于在rectangle绘图时,y轴是向下的,如下图所示:

 所以YOLO中输出的左上角实际上指的是(98,345)这个点,右下角是(420,462)这个点。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值