C++ 如何从缩放图像中知道真实图像中的坐标

C++ 如何从缩放图像中知道真实图像中的坐标,c++,image,qt,math,coordinates,C++,Image,Qt,Math,Coordinates,首先感谢您花时间阅读我的问题:-) 我有一个原始图像(w:2124,h:3204)和相同的缩放图像(w:512,h:768)。宽度比为4.14(rw),高度比为4.17(rh) 当我收到缩放图像(x,y)中的坐标时,我试图知道原始图像中的坐标(x',y')。我使用的公式是:x'=x*rw和y'=y*rh。但是当我画一条直线或一个矩形时,当x或y更高时,总是出现一个递增的移位 请问有人知道如何在不损失精度的情况下变换坐标吗 提前谢谢! 奥斯卡。使用更多的小数点,例如4.1484375和4.1718

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

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

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

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

提前谢谢!
奥斯卡。

使用更多的小数点,例如4.1484375和4.171875,否则您会得到5倍的差异。

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

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

这里你失去了坐标。 在哪个图像上绘制原始线或缩放线? 感谢hope将帮助您…

或者您可以使用创建变换并使用它映射点、矩形、直线等:

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);
qp1矢量;

p1感谢Monch,我尝试在所有操作中使用双数据类型,效果很好:-)抱歉,但在Qt中实现它的另一个答案比这更好。谢谢大家!!!哇!你的解决方案真的非常适合我:-)我使用它,效果非常好。谢谢不客气。如果使用quadToQuad创建一些奇异的变换(如扭曲或翻转),请小心。它可能无法创建转换。请务必检查我在示例中跳过的函数return。感谢您的建议,但我正在进行非常简单的转换:从缩放图像到真实图像。