将元素从 opencv 矩阵复制到特征矩阵
copying elements from an opencv matrix to a eigen matrix
我有一个 std::vector 填充了 3x3 opencv 矩阵。我想展开矩阵并将它们写在 9xn eigen::matrix 中。
std::vector<cv::Mat1d> cvMatrix;
// some code that generates a std::vector with 3880 cv matrices, the cv matrices have the size 3x3
Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix;
for (int i = 0; i < curvatures.size(); i++) {
eigenMatrix.resize(i + 1, 9);
for (int j = 0; j < 9; j++) {
eigenMatrix(i, j) = cvMatrix[i](j / 3, j % 3);
}
}
如果我在写入元素后立即检查它们(例如,如果 i==10 则打印 eigenMatrix 的值)似乎可以找到所有内容,但在 for 循环完成后不再有效。 eigenMatrix 中的大多数元素似乎都包含零。谁能解释这里发生了什么?
eigenMatrix.resize(i + 1, 9);
破坏了eigenMatrix
的内容。
由于一开始就已经知道最后的维度了,就写
Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix;
eigenMatrix.resize(curvatures.size(), 9);
甚至只是
Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix(curvatures.size(), 9);
在开始 for 循环之前。
如果您需要调整矩阵的大小,但保留内容,您可以使用 conservativeResize()
-- 但应该避免这种情况,因为每次调整大小都需要完整的副本。
我有一个 std::vector 填充了 3x3 opencv 矩阵。我想展开矩阵并将它们写在 9xn eigen::matrix 中。
std::vector<cv::Mat1d> cvMatrix;
// some code that generates a std::vector with 3880 cv matrices, the cv matrices have the size 3x3
Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix;
for (int i = 0; i < curvatures.size(); i++) {
eigenMatrix.resize(i + 1, 9);
for (int j = 0; j < 9; j++) {
eigenMatrix(i, j) = cvMatrix[i](j / 3, j % 3);
}
}
如果我在写入元素后立即检查它们(例如,如果 i==10 则打印 eigenMatrix 的值)似乎可以找到所有内容,但在 for 循环完成后不再有效。 eigenMatrix 中的大多数元素似乎都包含零。谁能解释这里发生了什么?
eigenMatrix.resize(i + 1, 9);
破坏了eigenMatrix
的内容。
由于一开始就已经知道最后的维度了,就写
Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix;
eigenMatrix.resize(curvatures.size(), 9);
甚至只是
Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix(curvatures.size(), 9);
在开始 for 循环之前。
如果您需要调整矩阵的大小,但保留内容,您可以使用 conservativeResize()
-- 但应该避免这种情况,因为每次调整大小都需要完整的副本。