DIPlib:将 dip::Image 对象转换为 vigra::MultiArrayView 对象 dip_vigra::DipToVigra 无效

DIPlib: Converting a dip::Image object to a vigra::MultiArrayView object with dip_vigra::DipToVigra not working

当我尝试将 dip::Image 对象转换为 vigra::MultiArrayView 对象时遇到了一些麻烦。反之亦然,但当我尝试调用 dip_Vigra::DipToVigra 时,我得到:

error: no matching function for call to ‘DipToVigra(dip::Image&)

我应该如何进行转换?

如前所述,dip_vigra::VigraToDip()

反之亦然
vigra::FImage Img;
Img.resize(width, height);
vigra::MultiArrayView<2, float> VigraView = Img;
dip::Image DIPimage;

DIPimage = dip_vigra::VigraToDip(VigraView); // works fine

VigraView = dip_vigra::DipToVigra(DIPimage); // fails 

我正在使用 code::blocks 作为 IDE 开发 opensuse。

因为dip::Image具有在运行时定义的属性(维度和像素类型),而vigra::MultiArrayView具有在编译时通过模板参数定义的属性,模板函数dip_vigra::DipToVigra()需要显式模板编译器了解输出类型的参数。

即编译器可以自动确定dip_vigra::VigraToDip()的模板参数,但不能自动确定dip_vigra::DipToVigra()

因此您需要明确提及这些参数:

VigraView = dip_vigra::DipToVigra<2, float>(DIPimage);

请注意,在运行时,该函数将检查 DIPimage 的属性是否与给定的模板参数匹配,如果不匹配则出错。

存储库有一个示例 C++ 程序,展示了如何在 DIPlib 和 Vigra 之间转换图像:https://github.com/DIPlib/diplib/blob/master/examples/external_interfaces/vigra_with_dip.cpp