我将opencv c++ API用于计算机视觉应用程序,并且使用cv::Mat结构管理矩阵。 Opencv使用引用计数将创建的对象释放为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对象销毁后,Shogun将立即取消分配矩阵。为了避免这种使用

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

这样,您必须注意内存的释放!

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

10-12 01:45