Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 特征:为贴图指定值_C++_Opencv_Matrix_Eigen - Fatal编程技术网

C++ 特征:为贴图指定值

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 但对我来说,即使是最简单的任务也失败了:

我正在使用opencv和Eigen

以下是如何将opencv Mat链接到特征矩阵的示例:

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

根据Eigen文档,映射应该是透明的,几乎所有对矩阵进行的操作都应该对映射进行操作。

下面是上面链接中的一些代码
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