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