Opencv cv::Mat和arma::Mat之间的转换
我正在使用OpenCV,还想添加一些来自的很酷的函数,即使用矩阵 在cv::Mat和arms::Mat之间转换是否有一种简单的方法Opencv cv::Mat和arma::Mat之间的转换,opencv,type-conversion,armadillo,mlpack,Opencv,Type Conversion,Armadillo,Mlpack,我正在使用OpenCV,还想添加一些来自的很酷的函数,即使用矩阵 在cv::Mat和arms::Mat之间转换是否有一种简单的方法 谢谢 OpenCV的Mat有一个指向其数据的指针。犰狳有一个能够读取外部数据的构造函数。把它们放在一起很容易。请记住Armadillo以列主顺序存储,而OpenCV使用行主顺序。我想您需要在转换之前或之后添加另一个步骤 cv::Mat opencv_mat; //opencv's mat, already transposed. arma::mat arma_
谢谢 OpenCV的
Mat
有一个指向其数据的指针。犰狳有一个能够读取外部数据的构造函数。把它们放在一起很容易。请记住Armadillo以列主顺序存储,而OpenCV使用行主顺序。我想您需要在转换之前或之后添加另一个步骤
cv::Mat opencv_mat; //opencv's mat, already transposed.
arma::mat arma_mat( reinterpret_cast<double*>opencv_mat.data, opencv_mat.rows, opencv_mat.cols )
您发布的代码执行隐式转置,因此如果您有一个行主要的OpenCV矩阵(即每行一个观察值),那么您得到的犰狳矩阵是列主要的(每列一个观察值)。这是幸运的,因为mlpack的算法需要列主数据。:)它起作用了!谢谢你,a-Jays!但是有没有一种方法可以将arma::mat转换为cv::mat呢?
cv::mat
构造函数有一个接受指向数据的指针的表单,arma::mat
有一个用于指向其数据的double*
指针的函数,名为memptr()
。因此,cv::Mat opencv\u Mat(行、列、cv\u 64FC1、arma\u Mat.memptr())
应该可以工作。此外,考虑标记答案如果它解决了问题。只是一个打字我发现它应该是<代码> RealTytCube(OpenPCvMa.Data),至少用我的编译器。除此之外,它工作得很好,谢谢!
cv::Mat opencv_mat( rows, cols, CV_64FC1, arma_mat.memptr() )