提问者:小点点

将元素从opencv矩阵复制到特征矩阵


我有一个std::vector填充了3x3的opencv矩阵。我想展开矩阵,把它们写成9×N的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,则打印特征矩阵的值),似乎所有的东西都找到了,但是在for循环完成后,就不再成立了。特征矩阵中的大多数元素似乎都包含零点。有人能解释这里发生了什么吗?


共1个答案

匿名用户

破坏的内容。由于您在开始时已经知道了最终维度,所以只需编写

Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix;
eigenMatrix.resize(curvatures.size(), 9);

甚至只是

Eigen::Matrix<double, Eigen::Dynamic, 9> eigenMatrix(curvatures.size(), 9);

在启动for-loop之前。

如果您需要调整矩阵的大小,但要保留内容,可以使用--但是应该避免这样做,因为每次调整大小都需要一个完整的副本。