2

我注意到这个简单的 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 图像失真

这当然不是 ArrayFire 所期望的;我希望它会转储完全相同的图像,因为我没有对其进行任何更改。不幸的是,我对 TIFF 图像格式或 ArrayFire 的图形后端知之甚少,无法理解发生了什么。加载图像时我做错了吗?(我遵循了 ArrayFire 文档loadImagesaveImage)。

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

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

谢谢!

4

0 回答 0