矩阵(非)分配
Matrix (dis)allocation
我使用opencv c ++ API进行计算机视觉应用程序,并使用cv::Mat结构管理矩阵。Opencv 使用 ref count 将创建的对象作为 cv::mat 发布。我还使用libshogun进行更具体的机器学习算法。幕府将军有自己的矩阵结构,称为SGMatrix。我从 cv::Mat 初始化 SGMatrix,如下所示:
cv::Mat cvmat(100,100,CV_32FC1,cv::Scalar(0.0));
SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols);
我的问题是当我在幕府将军库中使用另一个对象时,例如:
CSimpleFeatures<float>* features = new CSimpleFeatures<float>(sgmatrix);
幕府将军现在应该拥有用features
创建的矩阵,当 opencv 尝试发布已经由幕府将军发布的cvmat
时,我在运行时出现错误。我该如何处理?我不想克隆我的矩阵。
一旦
SGMatrix和simplefeature对象被销毁,幕府将军就会取消分配矩阵。为了避免这种使用
SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols, false);
这样,您必须处理内存释放!
为 OpenCV 外部的矩阵内部分配内存,使用 Shogun 或 new/malloc。然后,使用其中一个构造函数创建矩阵,该构造函数将指向矩阵数据(之前已分配)的void*
指针作为参数。这只会为您的数据创建一个 opencv 标头。
这样,opencv 就知道它不拥有矩阵中的数据,并且在释放cv::Mat
对象时不会尝试释放它。
相关文章:
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 如何动态分配由三重指针到类的矩阵?
- 使用动态分配的数组进行矩阵乘法;结果不正确
- 如何确保动态分配的矩阵是平方的?
- 如何进行放置分配特征::矩阵到共享内存(或堆)?
- 在动态分配的二维矩阵中插入新列
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 在另一个分配的矩阵中为特定范围创建 cv::Mat 标头
- 识别矩阵变量分配的行为
- 在 OpenCV 中分配矩阵元素
- 在动态分配矩阵上的访问违规读数位置
- 分配矩阵列标准偏差的向量正在改变其值(RcppArmadillo)
- 了解 cudaMalloc 分配矩阵的用法
- CUDA:可以在多内核中使用一次分配矩阵
- 如何在C++中分配矩阵
- C++提取器 (>>) 重载不读取和分配矩阵类
- 动态分配矩阵的算子重载
- C++内存分配.矩阵
- 如何修改/分配矩阵元素值
- 如何在c++ opencv中分配矩阵的元素