仅知道保持宽高比的比例因子来重新缩放图像

时间:2013-01-24 19:33:36

标签: c++ image-processing resolution rescale

好吧,我知道这听起来像是另一个问题的转贴,但我找不到任何人问我同样的问题,或者我错了,因为这不是解决问题的方法,但无论如何它来了:

我有一个输入图像,比如HD 1920 * 1080,我只知道比例因子:比如0.3(原始尺寸的30%)。 如何在保持纵横比的同时计算接近原始目标尺寸30%的新目标尺寸? 换句话说,如何准确地将图像重新缩放到30%?

如果这没有意义,请您告诉我如何在不知道目标尺寸的情况下缩放图像,只知道比例因子?

由于

Ps:我正在使用C / C ++,但伪代码没问题

1 个答案:

答案 0 :(得分:3)

如果你的身高和宽度是整数,你可以这样做......

height = height * (int)(scaleFactor*100) / 100;
width  = width  * (int)(scaleFactor*100) / 100;

或者,此解决方案也适用于int,但对浮点变量更有意义......

height = floor(height * scaleFactor);
width  = floor(width  * scaleFactor);

或者,无论变量类型如何,您都可以让编译器担心如何处理舍入...

height = height * scaleFactor;
width  = width  * scaleFactor;

...但是使用该解决方案,您可能会从一个平台到下一个平台逐个舍入错误。不过,这可能与您的用例无关。

另一种可能性,如果您的scaleFactor本身是int并且(在此示例中)为30%,那么scaleFactor可能是值30,而您' d只是这样做......

height = height * scaleFactor / 100;
width  = width  * scaleFactor / 100;

关键是如果你同时扩展你的x& y坐标相同因子,保留原始宽高比。