【问题标题】:How to know coordinates in a real image from a scaled image如何从缩放图像中知道真实图像中的坐标
【发布时间】:2010-06-07 09:48:47
【问题描述】:

首先感谢您花时间阅读我的问题:-)

我有一个原始图像(w':2124,h':3204)和相同的图像缩放(w:512,h:768)。宽度比为 4.14 (rw),高度比为 4.17 (rh)。

当我收到缩放图像 (x, y) 中的坐标时,我试图知道原始图像中的坐标 (x', y')。我使用的公式是:x' = x * rwy' = y * rh。但是当我画一条线或一个矩形时,总是会出现一个偏移,当 xy 较高时会增加。

请问有人知道如何在不丢失精度的情况下转换坐标吗?

提前致谢! 奥斯卡。

【问题讨论】:

    标签: c++ image qt math coordinates


    【解决方案1】:

    或者您可以使用QTransform::quadToQuad 创建一个变换并使用它来映射点、矩形、线等:

    QVector<QPointF>    p1;
    p1 << scaledRect.topLeft() << scaledRect.topRight() << scaledRect.bottomRight() << scaledRect.bottomLeft();
    QVector<QPointF>    p2;
    p2 << originalRect.topLeft() << originalRect.topRight() << originalRect.bottomRight() << originalRect.bottomLeft();
    QTransform::quadToQuad(p1, p2, mappingTransform);
    ...
    QPointF originalPoint = mappingTransform.map(scalePoint);
    

    【讨论】:

    • 哇...您的解决方案真的非常适合我 :-) 我使用它并且效果非常好。谢谢!!!
    • 不客气。如果您使用 quadToQuad 创建一些奇异的变换,如扭曲或翻转,请小心。它可能无法创建转换。请务必检查我在示例中跳过的函数返回。
    • 感谢您的建议,但我正在做非常简单的转换:从缩放图像到真实图像。
    【解决方案2】:

    使用更多的小数点,例如。 4.1484375 和 4.171875,否则会相差 5px。

    【讨论】:

    • 非常感谢,我尝试在所有操作中使用双数据类型并且工作正常:-)
    • 对不起,但另一个答案比这在 Qt 中实现它更好。谢谢大家!!!
    【解决方案3】:

    总是使用小数点。否则你会得到转变 在这里你也可以看到

    对于 x' = 512 * 4.14 = 2119.68 和 y' = 768 * 4.17 = 3202.56

    在这里你失去了坐标。 您在哪个图像上绘制原始线或缩放线? 谢谢希望能帮到你...

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多