我注意到这个简单的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的图形后端,以了解正在发生的事情。我在加载图片时做错了吗? (我遵循了loadImage
和saveImage
的ArrayFire文档。
我也尝试过使用loadImageNative
和saveImageNative
,但后者返回4层TIFF图像,而原始图像只是1层TIFF。
来自ArrayFire专家的任何帮助都会很棒。
谢谢!