将OpenCV库与Armadillo库结合使用的最佳方法是什么?

时间:2013-06-21 04:12:25

标签: opencv armadillo

我正在使用OpenCV构建一个图像处理应用程序。我也在使用Armadillo库,因为它有一些非常简洁的矩阵相关函数。但事情是,为了在cv :: Mat上使用Armadillo函数,我需要经常从cv :: Mat转换为arma :: Mat。 为了实现这一点,我使用像这样的函数将cv :: Mat转换为arma :: Mat

arma::Mat cvMat2armaMat(cv::Mat M)
{
    copy cv::Mat data to a arma::Mat
    return arma::Mat
}

有更有效的方法吗?

1 个答案:

答案 0 :(得分:2)

为避免或减少复制,您可以通过.memptr()成员函数访问Armadillo矩阵使用的内存。例如:

mat X(5,6);
double* mem = X.memptr();

使用上述内容时要小心,因为你不允许自己释放内存(Armadillo仍会管理内存)。

或者,您可以从现有内存构造Armadillo矩阵directly。例如:

double* data = new double[4*5];
// ... fill data ...
mat X(data, 4, 5, false);  // 'false' indicates that no copying is to be done; see docs

在这种情况下,您将负责手动管理内存。

还要记住,Armadillo在column-major order中存储和访问矩阵,即。首先存储第0列,然后存储第1列,第2列等。这与MATLAB,LAPACK和BLAS使用的相同。