首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DIPlib:将dip::Image对象转换为dip_vigra::DipToVigra不工作的vigra::MultiArrayView对象

DIPlib:将dip::Image对象转换为dip_vigra::DipToVigra不工作的vigra::MultiArrayView对象
EN

Stack Overflow用户
提问于 2022-01-29 20:17:21
回答 1查看 76关注 0票数 2

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

错误:没有调用‘DipToVigra’的匹配函数(dip::Image&)

我该如何进行这一转换?

如前所述,反之亦然,dip_vigra::VigraToDip()的工作方式也很好。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-29 23:05:20

由于dip::Image具有在运行时定义的属性(维度和像素类型),而vigra::MultiArrayView具有通过模板参数在编译时定义的属性,因此模板函数dip_vigra::DipToVigra()需要显式模板参数,以便编译器知道输出类型是什么。

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

因此,您需要显式地提到这些参数:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70909372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档