这post向我们展示如何在不复制数据的情况下将 cv::Mat
映射到 Eigen 矩阵,它工作正常,但有一件事我不明白。
Mat A(20, 20, CV_32FC1);
cv::randn(A, 0.0f, 1.0f); // random data
// Map the OpenCV matrix with Eigen:
Eigen::Map<Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> A_Eigen(A.ptr<float>(), A.rows, A.cols);
问题是,据我所知,Mat A
没有告诉 A_Eigen
每行应该占用多少字节,cv::OpenCV 的 Mat
可能会或可能不会对每一行进行填充,我是否需要告诉 Eigen 每行有多少字节(如何?)?或者我可以安全地忽略它?
Ps:我用的是Eigen 3
最佳答案
而不是使用 A.cols
, 使用 A.step
(或 A.step[0]
或 A.step[1]
?)。如果 OpenCV 矩阵不是 continuous , 然后 m.step != m.cols*m.elemSize()
.您只需要忽略任何其他列,例如与 A_Eigen.block<0,0>(A.rows, A.cols)
.
关于c++ - 将 OpenCV 的 cv::Mat 转换为 Eigen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32186143/