【问题标题】:Finding new position (x,y) after resizing image调整图像大小后找到新位置 (x,y)
【发布时间】:2016-11-30 18:36:01
【问题描述】:

我有一组边界框形式的对象注释。我有这些边界框的 x,y 和 x2y2 坐标。我希望预处理图像并使用 Matlab 的 imresize 或 opencv/python INTER_AREA 调整它们的大小。那里没有问题,但我希望找到边界框坐标的新位置。

理想情况下,我应该能够从 INTER_AREA 获取变换矩阵并将其应用于坐标,但尽管我浏览了大量内容,但我看不到这样做的方法。

谢谢。

【问题讨论】:

  • 转换与使用INTER_AREA还是其他解释无关。只有比例因子很重要。向我们展示您目前所拥有的。
  • 好吧,我还没有写代码,因为我试图理解。调整大小算法的工作方式无关紧要吗?它是从(0,0)还是中心点调整大小?我只需要极坐标吗?好吧,我将使用类似resize(src, dst, Size(), 0.5, 0.5, interpolation); 的东西我想要做的是将我的 854x480 图像缩小到最好是最长边为 500 的图像。或者我将只应用一个缩小比例因子,我不知道说 0.35
  • (0, 0) 仍将映射到 (0, 0),因此只有缩放因子很重要。
  • 哦,对了,因此它不是翻译。谢谢!好像我很困惑,所以我将只制作一个 x * 比例因子 , y * 比例因子,并且可能必须将其四舍五入,对吗?非常感谢。
  • 没错,就是这么简单。

标签: python matlab opencv image-processing transform


【解决方案1】:

您可以将 bbox 表示为原始图像的百分比,然后调整图像大小并将 bbox 转换回图像坐标。

例如:

function x1p,y1p,x2p,y2p = toPercentage(img_orig, x1,y1,x2,y2)
    h,w,c = size(img_orig);
    x1p = x1 / w;
    x2p = x2 / w;
    y1p = y1 / h;
    y2p = y2 / h;

一旦有了这些百分比,就可以调整图像大小,然后将 bbox 百分比转换回调整后图像的坐标。

function x1,y1,x2,y2 = toImCoord(img_resized, x1p,y1p,x2p,y2p)
    h,w,c = size(img_resized);
    x1 = x1p * w;
    x2 = x2p * w;
    y1 = y1p * h;
    y2 = y2p * h;        

【讨论】:

  • 嗨@Sean335,您能解释一下size() 的来源吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
相关资源
最近更新 更多