gpt4 book ai didi

c++ - 基本插值、放大和缩小

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:50 25 4
gpt4 key购买 nike

我有二维数组,它是对单色图像的解释。我想将其调整为特定的已知大小。质量不是必需的。如果我需要将它的大小调整为 2 倍或 4 倍,没关系,只需使用最近邻插值法,例如放置 4 个像素而不是一个像素。基本上,如果我需要将我的图像插值到 x1.5,我会将尺寸增加 x3 并将其减小 x2。我对吗?但是,当我需要将图像放大到 3 倍大小时,我该怎么办?那么像素应该如何放置在一个插值数组中?如果您提供任何信息、代码、指向其他站点的链接,那就太好了。

最佳答案

诀窍是反其道而行之:不要试图将源图像的像素放入缩放后的图像中,而是在源图像中找到应该放入缩放后的图像中的像素。

它看起来像这样:

float scaleFactor = 3.0f;

for (int y=0; y < scaledImageHeight; y++)
for (int x=0; x < scaledImageWidth; x++) {
int sourceImageX = (int)std::max(x * 1.0f / scaleFactor, (float)(sourceImageWidth - 1));
int sourceImageY = (int)std::max(y * 1.0f / scaleFactor, (float)(sourceImageHeight - 1));
scaledImage[y * scaledImageWidth + x] = sourceImage[sourceImageY * sourceImageWidth + sourceImageX];
}

出于演示目的,此代码将图像固定在右下角,因此程序不会因为数组溢出而崩溃(这就是 std::max 的用途)。

关于c++ - 基本插值、放大和缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8739754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com