ArrayFire(C ++)乱码的TIFF文件

时间:2017-04-03 17:13:23

标签: c++ tiff arrayfire

我注意到这个简单的ArrayFire程序导致加载的TIFF图像严重失真:

#include <iostream>
#include <arrayfire.h>

int main( int argc, char** argv ) {
    af::array img = af::loadImage( argv[1] );

    double mn, mx; 
    unsigned idxn, idxx;
    af::min( &mn, &idxn, img );
    af::max( &mx, &idxx, img );

    std::cout << "Image size = " << img.dims()[0] << ", " << img.dims()[1] << '\n';
    std::cout << "Data type = " << img.type() << '\n';
    std::cout << "Min = " << mn << " (at " << idxn << ")\n";
    std::cout << "Max = " << mx << " (at " << idxx << ")\n";

    af::saveImage( argv[2], img );

    return 0;
}

然后我编译并运行一个简单的(单色)图像:

./a.out orig.tif out.tif

使用以下输出:

Image size = 256, 256
Data type = 0
Min = 0 (at 65535)
Max = 81.5025 (at 31356)

当我想象这些图像时,我得到以下结果: ArrayFire TIFF image distortion

当然不是ArrayFire应该做的事情;我希望它可以转储完全相同的图像,因为我没有对它进行任何更改。不幸的是,我不太了解TIFF图像格式或ArrayFire的图形后端,以了解正在发生的事情。我在加载图片时做错了吗? (我遵循了loadImagesaveImage的ArrayFire文档。

我也尝试过使用loadImageNativesaveImageNative,但后者返回4层TIFF图像,而原始图像只是1层TIFF。

来自ArrayFire专家的任何帮助都会很棒。

谢谢!

0 个答案:

没有答案