我是新来eigen的。我在OpenCV表单中的条目,我必须使用Map类,以便将它们转换为eigen表单。我写了以下代码:
int main()
{
Mat label_data, train_data;
//some code
Eigen::Map<Eigen::Matrix<double, -1, -1, 1>> train_data_in_Eigen(train_data.ptr<double>(), train_data.rows, train_data.cols);
Eigen::Map<Eigen::Matrix<double, -1, -1, 1>>* pTrain_data_in_Eigen = &train_data_in_Eigen;
foo(train_labels, pTrain_data_in_Eigen);
//some code
}
void foo(std::vector<int> gnd, Eigen::Map<Eigen::Matrix<double, -1, -1, 1>>* pdata)
{
Eigen::Map<Eigen::Matrix<double, -1, -1, 1>> _data = *pdata;
auto meanOf_data = _data.colwise().mean();
_data.rowwise() -= meanOf_data;
//some code
}我在_data.rowwise() -= meanOf_data;行中有这个Exception Error:Exception thrown at: Access violation reading location。但是当我这样写的时候:auto dd = _data.rowwise() -= meanOf_data,我没有Exception。有什么问题吗?该如何修复呢?
发布于 2018-02-11 22:35:02
由于auto,meanOf_data是一个引用死的临时对象的表达式,而不是一个实际的向量。阅读common pitfalls。解决方案:
RowVectorXd meanOf_data = _data.colwise().mean();或者:
auto meanOf_data = _data.colwise().mean().eval();https://stackoverflow.com/questions/48731879
复制相似问题