首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eigen:为map赋值

Eigen:为map赋值
EN

Stack Overflow用户
提问于 2017-04-11 22:55:29
回答 2查看 861关注 0票数 1

我正在对Eigen使用opencv。

以下是如何将opencv Mat链接到特征矩阵的示例:OpenCV CV::Mat and Eigen::Matrix

关键是使用Eigen的Map类型,它可以指向opencv分配的内存。

根据Eigen文档,Map应该是透明的,几乎所有处理矩阵的操作也应该在Map上工作。https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html

下面是上面链接中的一些代码。m2map指向名为m2的矩阵的内存

代码语言:javascript
复制
m2map(3) = 7;   // this will change m2, since they share the same array

但对我来说,即使是最简单的任务也会失败:

代码语言:javascript
复制
Eigen::Map<Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> eigenHeatmap(heatmap.ptr<float>(), heatmap.rows, heatmap.cols);

eigenHeatmap=0.f;

产生:

代码语言:javascript
复制
/.../Code.cpp:69:25: error: no match for ‘operator=’ (operand types are ‘Eigen::Map<Eigen::Matrix<float, -1, -1, 1> >’ and ‘float’)
             eigenHeatmap=0.f;

整个错误消息相当长:https://pastebin.com/i3AWs6C7

我使用的是eigen3.3.3、opencv3.2.0和g++ 5.4.0

EN

回答 2

Stack Overflow用户

发布于 2017-04-12 13:12:02

您应该尝试使用eigenHeatmap.setZero();eigenHeatmap.setConstant(0.f);

票数 3
EN

Stack Overflow用户

发布于 2017-04-12 15:26:27

替代Avi的答案,如果您正在进行大量的元素级操作,请使用Array而不是Matrix,即

代码语言:javascript
复制
Eigen::Map<Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> eigenHeatmap(heatmap.ptr<float>(), heatmap.rows, heatmap.cols);

eigenHeatmap=0.f;

如果你经常使用它,首先做一些typedefs:

代码语言:javascript
复制
typedef Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> ArrayXXfR;
typedef Eigen::Map<ArrayXXfR> ArrayMap;
ArrayMap eigenHeatmap(heatmap.ptr<float>(), heatmap.rows, heatmap.cols);

附录:有关Array类的更多详细信息,请访问read the corresponding tutorial here

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

https://stackoverflow.com/questions/43349471

复制
相关文章

相似问题

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