目标检测和边界框

这段代码展示了如何将图像中的边界框从左上和右下坐标转换为中间点和宽高,以及反之。它还提供了用于在图像上绘制边界框的辅助函数。示例应用在'catdog.jpg'图片上,用蓝色和红色分别标记了狗和猫的边界框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import torch
from d2l import torch as d2l

d2l.set_figsize()
img = d2l.plt.imread('./catdog.jpg')
d2l.plt.imshow(img)

#@save
def box_corner_to_center(boxes):
    """从左上右下到中间宽和高"""
    x1,y1,x2,y2 = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]
    cx = (x1 + x2)/2
    cy = (y1 + y2)/2
    w = x2 - x1
    h = y2 - y1
    boxes = torch.stack((cx,cy,w,h),axis = -1)
    return boxes

#@save
def box_center_to_corner(boxes):
    """从中间宽高到左上右下"""
    cx,cy,w,h = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]
    x1 = cx - 0.5*w
    y1 = cy - 0.5*h
    x2 = cx + 0.5*w
    y2 = cy + 0.5*h
    boxes = torch.stack((x1,y1,x2,y2),axis = -1)
    return boxes
dog_bbox,cat_bbox = [60.0,45.0,378.0,516.0],[400.0,112.0,655.0,493.0]
boxes = torch.tensor((dog_bbox, cat_bbox))

def bbox_to_rect(bbox,color):
    return d2l.plt.Rectangle(
    xy = (bbox[0],bbox[1]),width = bbox[2] - bbox[0],height = bbox[3] - bbox[1],
        fill = False,edgecolor = color,linewidth = 2
    )

img = d2l.plt.imread('./catdog.jpg')
fig = d2l.plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值