c++ - 矩阵(dis)分配

标签 c++ opencv memory-management shogun

我将 opencv c++ API 用于计算机视觉应用程序,并使用 cv::Mat 结构管理矩阵。 Opencv 使用引用计数将创建的对象释放为 cv::Mat。 我还将 libshogun 用于更具体的机器学习算法。 Shogun 有自己的矩阵结构,称为 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);

我的问题是当我在 shogun 库中使用另一个对象时,例如:

CSimpleFeatures<float>* features = new CSimpleFeatures<float>(sgmatrix);

shogun 现在应该拥有使用 features 创建的矩阵,我在运行时遇到错误,当 opencv 尝试释放 cvmat 时,它已经被释放将军。 我该如何处理?我不想克隆我的矩阵。

最佳答案

一旦 SGMatrix 和 simplefeature 对象被销毁,Shogun 就会释放矩阵。为了避免这种使用

SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols, false);

这样你就必须处理内存释放!

关于c++ - 矩阵(dis)分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352150/

相关文章:

c++ - 我们需要在 C++ 中同步局部对象变量吗?

c++ - pow 积分值

python - 使用 openCV 裁剪简单边界框

c++ - 如何获取 C++ 中可用的虚拟内存量?

javascript - promises 和 closures 是否消耗了我所有的内存?

c++ - 我的 Tic Tac Toe 游戏代码中的一个问题

c++ - 如何在 Postgresql for C++ 中准备语句和绑定(bind)参数

Python OpenCV2(cv2)包装器获取图像大小?

python - 使用opencv查找水平线和垂直线

iPhone 开发者 - viewDidUnload subview