c++ - 将 OpenCV 的 cv::Mat 转换为 Eigen

标签 c++ opencv eigen eigen3

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/

相关文章:

c++ - 如何减小 WASM 二进制文件的大小?

c++ - C++中的外部结构?

c++ - 结构 vector push_back C++

c++ - 稀疏矩阵上的 block 操作 - Eigen Toolbox - C++

c++ - A^T*A稀疏积,结果存储在Dense Matrix/Eigen Lib中

c++ - QT - 将小部件添加到水平布局

c++ - OpenCV:我们需要删除 CvPoint 吗?如何删除?

opencv - 如何使用OpenCV查找从摄像机到对象/标记的距离和旋转?

image - 如何使用 OpenCV 找到图像上每个轮廓的高度和宽度

c++ - Eigen 3.3 SVD.solve 返回错误值