C++ 特征:为贴图指定值
我正在使用opencv和Eigen 以下是如何将opencv Mat链接到特征矩阵的示例: 关键是使用Eigen的映射类型,它可以指向opencv分配的内存 根据Eigen文档,映射应该是透明的,几乎所有对矩阵进行的操作都应该对映射进行操作。 下面是上面链接中的一些代码C++ 特征:为贴图指定值,c++,opencv,matrix,eigen,C++,Opencv,Matrix,Eigen,我正在使用opencv和Eigen 以下是如何将opencv Mat链接到特征矩阵的示例: 关键是使用Eigen的映射类型,它可以指向opencv分配的内存 根据Eigen文档,映射应该是透明的,几乎所有对矩阵进行的操作都应该对映射进行操作。 下面是上面链接中的一些代码m2map指向名为m2的矩阵的内存: m2map(3) = 7; // this will change m2, since they share the same array 但对我来说,即使是最简单的任务也失败了:
m2map
指向名为m2
的矩阵的内存:
m2map(3) = 7; // this will change m2, since they share the same array
但对我来说,即使是最简单的任务也失败了:
Eigen::Map<Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> eigenHeatmap(heatmap.ptr<float>(), heatmap.rows, heatmap.cols);
eigenHeatmap=0.f;
Eigen::Map eigenHeatmap(heatmap.ptr(),heatmap.rows,heatmap.cols);
本征热图=0.f;
产生:
/.../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;
/…/code.cpp:69:25:错误:“operator=”不匹配(操作数类型为“Eigen::Map”和“float”)
本征热图=0.f;
整个错误消息相当长:
我使用的是eigen3.3.3、opencv3.2.0和g++5.4.0您应该尝试
eigenHeatmap.setZero()代码>或<代码>特征热图设置常数(0.f)代码>取而代之。您应该尝试eigenHeatmap.setZero()代码>或<代码>特征热图设置常数(0.f)代码>取而代之。替代Avi的答案,如果您正在执行大量的元素操作,请使用数组
代替矩阵
,即
Eigen::Map<Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> eigenHeatmap(heatmap.ptr<float>(), heatmap.rows, heatmap.cols);
eigenHeatmap=0.f;
Eigen::Map eigenHeatmap(heatmap.ptr(),heatmap.rows,heatmap.cols);
本征热图=0.f;
如果你经常使用,先做一些typedef:
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);
typedef特征::数组arrayxfr;
typedef Eigen::Map.替代Avi的答案,如果您正在执行大量的元素操作,请使用数组
而不是矩阵
,即
Eigen::Map<Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> eigenHeatmap(heatmap.ptr<float>(), heatmap.rows, heatmap.cols);
eigenHeatmap=0.f;
Eigen::Map eigenHeatmap(heatmap.ptr(),heatmap.rows,heatmap.cols);
本征热图=0.f;
如果你经常使用,先做一些typedef:
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);
typedef特征::数组arrayxfr;
typedef Eigen::Map