当我试图从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 我正在使用代码::块作为IDE开发opensuse。
发布于 2022-01-29 23:05:20
由于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
https://stackoverflow.com/questions/70909372
复制相似问题