我正在使用 OpenCV 构建图像处理应用程序。我还使用 Armadillo 库,因为它有一些非常简洁的矩阵相关函数。但问题是,为了在 cv::Mat 上使用犰狳函数,我需要频繁地从 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
}
有没有更有效的方法来做到这一点?
为了避免或减少复制,您可以通过以下方式访问犰狳矩阵使用的内存:.memptr() http://arma.sourceforge.net/docs.html#memptr成员函数。例如:
mat X(5,6);
double* mem = X.memptr();
使用上述内容时要小心,因为您不允许自己释放内存(犰狳仍然会管理内存)。
或者,您可以构建一个犰狳矩阵directly http://arma.sourceforge.net/docs.html#adv_constructors_mat从现有的记忆中。例如:
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
在这种情况下,您将负责手动管理内存。
另请记住,犰狳存储和访问矩阵列主序 http://en.wikipedia.org/wiki/Column_major#Column-major_order, IE。首先存储第 0 列,然后是第 1 列、第 2 列等。这与 MATLAB、LAPACK 和 BLAS 使用的相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)