如何从缩放后的图像中获取真实图像的坐标?

4

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

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

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

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

提前致谢! Oscar。

3个回答

4

或者您可以使用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);

哇...你的解决方案对我来说真是太完美了 :-) 我使用它,效果非常好。谢谢!!! - osanchezmon
欢迎。如果您使用quadToQuad创建一些奇特的变换,如扭曲或翻转,请小心。它可能无法创建变换。请务必检查函数返回值,在我的示例中我跳过了这一步。 - Stephen Chu
谢谢您的建议,但我只是进行非常简单的转换:从缩放图像到实际图像。 - osanchezmon

2

使用更多小数位,例如4.1484375和4.171875,否则会产生5像素的差异。


非常感谢,我尝试在所有操作中使用双精度数据类型,结果正常 :-) - osanchezmon
抱歉,但另一个答案比这个更适合在Qt中实现。谢谢大家!!! - osanchezmon

1

始终使用小数点,否则您将得到偏移量。 在这里您也可以看到

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

在这里,您正在失去坐标。 您正在哪个图像上绘制线条,原始的还是缩放后的? 谢谢,希望能帮到您...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接