首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵(Dis)分配

矩阵(Dis)分配
EN

Stack Overflow用户
提问于 2012-04-27 22:04:35
回答 2查看 589关注 0票数 1

我为计算机视觉应用程序使用opencv c++ API,并使用cv::Mat结构管理矩阵。Opencv使用ref counting将创建的对象释放为cv::Mat。我还使用libshogun来实现更具体的机器学习算法。幕府有自己的矩阵结构,称为SGMatrix。我从cv::Mat初始化SGMatrix,如下所示:

代码语言:javascript
复制
cv::Mat cvmat(100,100,CV_32FC1,cv::Scalar(0.0)); 
SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols);

我的问题是当我在幕府lib中使用另一个对象时,比如:

代码语言:javascript
复制
CSimpleFeatures<float>* features = new CSimpleFeatures<float>(sgmatrix);

幕府现在应该拥有使用features创建的矩阵,在运行时,当opencv试图发布已经由幕府发布的cvmat时,我得到了一个错误。我该怎么处理呢?我不想克隆我的矩阵。

EN

回答 2

Stack Overflow用户

发布于 2012-12-07 00:33:59

一旦SGMatrix和simplefeature对象被销毁,幕府将立即释放矩阵。为了避免这种用法

代码语言:javascript
复制
SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols, false);

通过这种方式,您必须处理内存释放!

票数 3
EN

Stack Overflow用户

发布于 2012-04-27 22:33:40

将内存分配给OpenCV外部的矩阵内部,使用幕府或使用new / malloc。然后,使用一个构造函数创建矩阵,该构造函数将指向矩阵数据的void*指针作为参数(您以前已经分配过)。这将仅为您的数据创建一个opencv标头。

这样,opencv就知道它不拥有矩阵中的数据,并且当cv::Mat对象被释放时,它不会试图释放这些数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10352150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档