将OpenCV的cv::Mat转换为Eigen

Convert the cv::Mat of OpenCV to Eigen

本文关键字:转换 Eigen Mat cv OpenCV      更新时间:2023-10-16

这篇文章向我们展示了如何将cv::Mat映射到特征矩阵而不复制数据,它工作得很好,但有一件事我不明白。

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每行需要多少字节,据我所知,OpenCV的cv::Mat可能会或可能不会在每行上填充,我是否需要告诉特征行多少字节(如何?)?,或者我可以安全地忽略它?

Ps:我使用特征3

使用A.step(或A.step[0]A.step[1] ?)代替A.cols。如果OpenCV矩阵不连续,则m.step != m.cols*m.elemSize()。你只需要忽略任何额外的列,例如A_Eigen.block<0,0>(A.rows, A.cols)