繁体   English   中英

在cv :: Mat到Eigen :: Matrix和之间的转换矩阵

[英]Casting matrix between cv::Mat to Eigen::Matrix and

说我有:

Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> someMatrixEigen = someMatrix();

如果我要创建一个cv :: Mat标头(类型为CV_8U),我应该可以这样做,对吧?

cv::Mat someMatrixOCV(someMatrixEigen.rows(), someMatrixEigen.cols(), CV_8U, someMatrixEigen.data());

然后,如果我有cv::Mat anotherMatrixOCV ,回到Eigen,这也应该有用吗?

Eigen::Map<Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> > anotherMatrixEigen(anotherMatrixOCV.ptr<int>(), anotherMatrixOCV.rows, anotherMatrixOCV.cols);

这里的整数类型是否兼容? 当我使用float和CV_32F时,我似乎能够使这个工作,但整数版似乎不起作用(segfault)。

CV_8U似乎是无符号类型(具体地说,8位,例如unsigned char ),而您的矩阵是有符号的int类型(多少位取决于您的编译器,但超过8)。 您可以尝试使用CV_32S进行转换,或者使用Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM