CImg get_crop()返回错误像素/得到CImg

时间:2016-04-14 08:30:13

标签: c++ image-processing cimg

我正在尝试获得CImg的子图像。据我所知,方法get_crop()做了我需要的,但我得到的子图像不包含我期望它们具有的像素值。

unsigned char* StringTextureGenerator::GetTexture(int &width, int &height)
{
    cil::CImg<unsigned char>* tmp = new cil::CImg<unsigned char>(512, 512, 1, 4);

    *tmp = _alphabet.get_crop(0, 0, 0, 0, 511, 511, 0, 3);

    width = tmp->width();
    height = tmp->height();
    return tmp->data();
}

_alphabet CImg是512x512x1x4并包含rgba图像。对于测试,我试图得到整个图像x = 0-511,y = 0-511。 结果如下:

enter image description here

这是预期的结果。我从文件中加载了整个图像。

但是当我试图获得一个子图像时,会发生奇怪的事情。

unsigned char* StringTextureGenerator::GetTexture(int &width, int &height)
{
    cil::CImg<unsigned char>* tmp = new cil::CImg<unsigned char>(256, 256, 1, 4);

    *tmp = _alphabet.get_crop(0, 0, 0, 0, 255, 255, 0, 3);

    width = tmp->width();
    height = tmp->height();
    return tmp->data();
}

这里我得到像素x = 0 - 255,y = 0 - 255,我希望它是图片的左上角。 结果如下:

The result is this:

正如你所看到的,我得到了每个128x128块的左上角。这不是我想要的。

1 个答案:

答案 0 :(得分:1)

不确定您的代码是怎么回事,但这在我的机器上运行正常。我正在使用 CImg v169。我用它作为测试图像:

enter image description here

运行此代码:

#include <iostream>
#include "CImg.h"

using namespace cimg_library;
int main() 
{
    CImg<unsigned char> alphabet = CImg<unsigned char>("alphabet.png");
    CImg<unsigned char> tmp = CImg<unsigned char>(512, 512, 1, 4);

    //tmp = alphabet.get_crop(0, 0, 0, 0, 511, 511, 0, 3);
    tmp = alphabet.get_crop(0, 0, 0, 0, 255, 255, 0, 3);
    tmp.save_png("result.png");
}

得到这个,看起来对我来说是正确的:

enter image description here

我正在使用选项进行编译:

-Dcimg_use_png -lpng -lz