Numpy中如何计算填充后框的边界框(无需生成填充数组)
问题:Numpy填充数组后,原数组中框的位置映射
场景说明
现有二维Numpy数组定义如下:
import numpy as np # 原二维世界数组 a = np.zeros((w_world, h_world))
还有一个ltwh格式的框b(即由left、top、width、height四个参数定义,代表框在数组a坐标系中的位置与尺寸),这个框可能超出数组a的边界。
我需要确定:当使用Numpy的pad方法对数组a进行填充后,这个框b在填充后的新数组中的对应位置。
我已经能自行实现这个功能(支持多种填充模式),但想知道Numpy有没有内置的相关函数可以直接完成这个位置映射。
解答
目前Numpy并没有专门用于直接计算这种框位置映射的内置函数。
要完成这个映射,核心逻辑是根据pad方法指定的**填充宽度(pad_width参数)**计算偏移量:
- 首先把pad_width转换为二维数组的完整格式:
((顶部填充行数, 底部填充行数), (左侧填充列数, 右侧填充列数)) - 假设原框b的ltwh参数为
(b_left, b_top, b_width, b_height) - 填充后框的新ltwh参数就是:
(b_left + 左侧填充列数, b_top + 顶部填充行数, b_width, b_height)
注意事项
- 不管填充模式是
constant、edge还是其他类型,这个偏移计算逻辑都通用——填充模式只影响填充区域的数值,不会改变填充后数组的尺寸以及原元素/框的位置偏移规则。 - 如果pad_width是用简化格式指定的(比如单个整数、所有维度统一填充),需要先将其转换为
((top, bottom), (left, right))的完整格式,再提取对应方向的填充值计算偏移。
内容的提问来源于stack exchange,提问作者Gulzar
相关产品推荐
相关产品推荐

