1

当我尝试从dip::Image对象转换为vigra::MultiArrayView. 反之亦然,但当我尝试打电话dip_Vigra::DipToVigra时,我得到:

错误:没有匹配函数调用 '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。

4

1 回答 1

1

因为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

于 2022-01-29T23:05:20.050 回答