[英]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.