【问题标题】:Rescale rectangle (Top, Left, Bottom, right)重新缩放矩形(上、左、下、右)
【发布时间】:2014-09-15 13:46:31
【问题描述】:

原问题:Original question

我有一个尺寸为height x width = (1500,500) 的图像I1 已调整为(500,300)

I1 包含以其坐标(Top, Left, Bottom, Right) 为特征的边界框。


I1的大小改变时,如何重新调整边界框的坐标?这些公式正确吗?

   double newTop = Math.Ceiling((top) * (double)pictureBox1.Height / (double)image1.Height);
   double newLeft = Math.Ceiling((left) * (double)pictureBox1.Width / (double)image1.Width);
   double newBottom = Math.Ceiling((bottom + 1) * (double)pictureBox1.Height / (double)image1.Height) - 1;
   double newRight = Math.Ceiling((right + 1) * (double)pictureBox1.Width / (double)image1.Width) - 1;

【问题讨论】:

  • 不经实际尝试,乍一看似乎还可以。
  • 你确定你应该做整数除法吗?在我看来,除非我完全误解了你的代码,否则你会遇到一些大错误。
  • @InBetween 你是对的。也许是因为整数我无法正确重新调整边界框。我现在就试试。我应该采用上限还是下限?对于部门
  • 代码看起来像C#,为什么要加C++标签?

标签: c# rectangles bounding-box rescale


【解决方案1】:

一般:

尺寸按因子(新尺寸)/(旧尺寸)缩放。

坐标有点复杂:

x2 = left2 + (x1 - left1) * width2 / width1
y2 = top2 + (y1 - top1) * height2 / height1

其中leftwidth 等描述了整个图像的位置。 xy 描述正在转换的特征。在您的情况下,边界框的角是特征。

如果left1left2top1top2 都为零,你会得到与你相似的表达式。

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多