在eige中使用rowwise()时出现异常

时间:2018-02-11 13:16:51

标签: c++ opencv eigen

我是switch (pressedKey.Key) { case ConsoleKey.LeftArrow: { PlayerX--; if (PlayerX == -1) PlayerX++; } break; case ConsoleKey.RightArrow: { PlayerX++; if(PlayerX == width-1) PlayerX--; } break; case ConsoleKey.UpArrow: { PlayerY--; if (PlayerY == -1) PlayerY++; } break; case ConsoleKey.DownArrow: { PlayerY++; if (PlayerY == height) PlayerY--; } break; case ConsoleKey.E: runGame = false; break; } 的新人。我的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 } 中得到了Exception Error_data.rowwise() -= meanOf_data;。但是当我以这种方式写作时:Exception thrown at: Access violation reading location我没有auto dd = _data.rowwise() -= meanOf_data。什么问题?以及如何解决?

1 个答案:

答案 0 :(得分:1)

由于automeanOf_data是一个引用死临时对象的表达式,而不是实际向量。阅读common pitfalls。解决方案:

RowVectorXd meanOf_data = _data.colwise().mean();

或:

auto meanOf_data = _data.colwise().mean().eval();