将元素从 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() -- 但应该避免这种情况,因为每次调整大小都需要完整的副本。