Yolov5笔记--自适应图片缩放letterbox

这篇具有很好参考价值的文章主要介绍了Yolov5笔记--自适应图片缩放letterbox。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1--原理及作用

        具体分析请参考博客1;

        简单阐述:letterbox()函数的作用是将图像缩放到指定尺寸,因为直接resize到指定尺寸会导致信息的丢失,而采用等比例缩放的形式,能较好地保留图像的信息;

        Yolov5采用自适应缩放确保图片宽高值最大为640,同时通过padding填充像素值的方式确保宽高能被32整除,最大程度地利用感受野

2--测试代码

import cv2
import numpy as np

def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
    
    shape = im.shape[:2]  # 计算当前帧的宽高

    # 判断传入的new_shape是否是一个整数,传入的参数可能是单个整数640,表示宽×高为640×640
    if isinstance(new_shape, int): 
        new_shape = (new_shape, new_shape)

    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) # 缩放比

    if not scaleup:  # 只缩小,不放大,保证比例最大为1.0
        r = min(r, 1.0)

    
    ratio = r, r  # 宽和高的缩放比
    new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) # 计算缩放后图片的宽和高
    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # 计算目标宽高和缩放后宽高的差值,即需要padding的大小
    if auto: # 采用自适应图片缩放,确保宽和高都能被stride整除,因此需要补边
        dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # 需要padding的大小,需要被32整除
    elif scaleFill:  # scaleFill表示不采用自适应缩放,直接resize到目标shape,无需补边
        dw, dh = 0.0, 0.0
        new_unpad = (new_shape[1], new_shape[0])
        ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]  # 缩放比

    # 上下和左右两侧各 padding 一半
    dw /= 2  
    dh /= 2

    if shape[::-1] != new_unpad:  # resize
        im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)

    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) # 上下两侧需要padding的大小
    left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) # 左右两侧需要padding的大小
    im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # 填充指定大小的固定像素值value
    return im, ratio, (dw, dh)


if __name__ == "__main__":
    img1 = cv2.imread("./test1.jpg")
    print("img1.shape: ", img1.shape)

    new_img1 = letterbox(img1)[0] # 取第一个返回值
    print("new_img1.shape: ", new_img1.shape)

    img2 = np.random.randint(low = 0, high = 255, size=(630, 470, 3), dtype=np.uint8)
    print("img2.shape: ", img2.shape)
    new_img2 = letterbox(img2)[0] # 取第一个返回值
    print("new_img2.shape: ", new_img2.shape)

    img3 = np.random.randint(low = 0, high = 255, size=(470, 470, 3), dtype=np.uint8)
    print("img3.shape: ", img3.shape)
    new_img3 = letterbox(img3)[0] # 取第一个返回值
    print("new_img3.shape: ", new_img3.shape)

yolov5 letterbox,深度学习笔记,python,计算机视觉,人工智能

 文章来源地址https://www.toymoban.com/news/detail-583976.html

到了这里,关于Yolov5笔记--自适应图片缩放letterbox的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5 获取漏检图片脚本

    获取样本分数在0.05到0.38直接的样本。

    2024年02月04日
    浏览(47)
  • QT编写实现图片的幻灯片播放、自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、重置、显示鼠标位置像素坐标及RGB值、播放GIF动画、截图保存、批量保存、拖入文件夹遍历所有文件

    这个图片查看器功能很多,是我花了不少心思,不断优化,不断添加功能的成果: 1.能打开并显示所有常用图片格式文件,显示鼠标位置像素坐标及RGB值 2.能缩放,拖动图片,可以以鼠标为中心滚动滚轮进行缩放 3.右击可弹出菜单栏,菜单包括:适应宽度,适应窗口,原图大

    2024年02月10日
    浏览(63)
  • 使用YOLOv5实现图片、视频的目标检测

    接下来我将从官方代码开始,一步一步展示如何进行图片、视频识别 首先从GitHub下载官方代码(也可以从下面链接获取): 链接:https://pan.baidu.com/s/16wzV899D90TY2Xwhx4TwhA 提取码:vzvj (你的环境名可能和我不一样) 可以看到 \\\'--weights\\\' 参数(参数解读详见4.a)的默认值为\\\'yolov

    2023年04月15日
    浏览(42)
  • YOLOV5目标检测---labelimg图片标注工具(1)

    前言:在使用YOLO训练自己模型的时候首先要学会对数据进行处理,这里介绍一个常用的本地打标签工具labelimg,如果不想按照的话也可以使用在线标签工具,因为害怕数据泄露,所以本人一直使用的是本地工具进行打标签。在线标注工具网站:https://www.makesense.ai/ Labelimg是一款

    2024年02月12日
    浏览(49)
  • yolov5 web端部署进行图片和视频检测

    目录 1、思路 2、代码结构 3、代码运行 4、api接口代码 5、web ui界面 6、参考资料 7、代码分享  通过搭建flask微型服务器后端,以后通过vue搭建网页前端。flask是第一个第三方库。与其他模块一样,安装时可以直接使用python的pip命令实现。flask是web开发框架,简单易学,因此用

    2024年02月05日
    浏览(44)
  • rk3588下yolov5火焰识别图片输出log

    post process config: box_conf_threshold = 0.25, nms_threshold = 0.45 Loading mode… sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22) driver version: 0.9.3 model input num: 1, output num: 3 index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp

    2024年03月13日
    浏览(53)
  • yolov5学习笔记整理

    这篇文章是我在自己完成yolov5的学习之后,整理出的笔记,可供学习参考,如有错误还请指正。 首先,yolov5主要分为四个部分,输入端,backbone,neck,输出端。 (1) Mosaic数据增强 在Yolo-V4的paper中,以及在还未发表paper的Yolo-V5中,都有一个很重要的技巧,就是Mosaic数据增强

    2024年02月07日
    浏览(34)
  • win11 yolov5训练踩坑,笔记

    环境配置见 yolov5/yolov3 pytorch环境配置gpu+windows11+anaconda+pycharm+RTX3050 笔记 正确的训练步骤见 (windows)yolov5/yolov3训练自己的数据集,win11 gpu,pycharm,RTX3050笔记 数据集文件分布 建议将JPEGImages改为images,否则见报错三及解决方法 HITUAVyolo.yaml数据集配置 修改train.py 搜索--data 将coco.

    2023年04月22日
    浏览(30)
  • Windows系统之Yolov5的安装教程笔记

      可以在官网下载:Anaconda | The World\\\'s Most Popular Data Science Platform下载。 下载完成后会在开始菜单中多出一个快捷方式,和一些Anaconda的子程序。比如常用的“Anaconda Prompt(anaconda)”。     Yolov5源码的 Github地址:https://github.com/ultralytics/yolov5    解压到自定义目录中。  下载

    2023年04月23日
    浏览(47)
  • 深度学习图像识别笔记(三):yolov5检测结果分析

    是一种可视化工具,特别用于监督学习。通过这个矩阵,可以很清晰地看出机器是否将两个不同的类混淆了。 上图的表格其实就是 confusion matrix True/False: 预测结果是否正确 Positive/Negative:预测的方向是正方向还是负方向 真阳性(True Positive, TP): 预测为正样本,实际为正样

    2023年04月25日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包