使用 OpenCV (2.4.5) 时出现内存异常
Posted
技术标签:
【中文标题】使用 OpenCV (2.4.5) 时出现内存异常【英文标题】:Memory exception while using OpenCV (2.4.5) 【发布时间】:2013-06-26 18:40:58 【问题描述】:这是我的程序。这真的很容易。我正在尝试运行 10,000 次迭代,但在第 838 次迭代之后,我总是收到以下消息:
OpenCV 错误:内存不足
in unknown function。
为什么会抛出这个内存异常?
#include "stdafx.h"
#include "cv.h"
#include "opencv2\core\core.hpp"
#include "opencv2\highgui\highgui.hpp"
int _tmain(int argc, _TCHAR* argv[])
for(int i = 0;i<100000;i++)
CvMat *mat = cvCreateMat(640*480,5,CV_64FC1);
CvMat *mat_ = cvCreateMat(640*480,1,CV_64FC1);
cvGetCol(mat,mat_,1);
printf("%d th iteration \n",i);
cvReleaseMat(&mat_);
cvReleaseMat(&mat);
return 0;
【问题讨论】:
【参考方案1】:您的问题是内存泄漏。行:
CvMat *mat_ = cvCreateMat(640*480,1,CV_64FC1);
为具有指定维度的CvMat
分配内存。当您将该指针传递给cvGetCol()
时,指针将更改为指向mat
中的指定列。但是,您之前分配的内存永远不会被释放,从而导致内存泄漏。
要解决此问题,请更改行:
CvMat *mat_ = cvCreateMat(640*480,1,CV_64FC1);
到以下:
CvMat temp;
CvMat* mat_ = &temp;
这应该可以解决您的内存泄漏问题。但是,如果可能的话,我强烈建议您改用 C++ API(使用 cv::Mat
)。 C API 已弃用,C++ API 更易于使用并提供自动内存管理。
【讨论】:
以上是关于使用 OpenCV (2.4.5) 时出现内存异常的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV:使用 cvWriteFrame 从网络摄像头写入视频时出现内存泄漏
使用 EPPlus 库从 SQL Server 导出到 Excel 时出现“内存不足”异常