c++ - 关于声明/释放 IplImages 的两种情况

标签 c++ visual-studio-2010 opencv

我非常关心项目中的内存。由于内存泄漏,它之前崩溃过。 我正在考虑两种方法:

  • 在主项目部分只声明一次不同的 IplImages。
  • 每次我需要声明 IplImage 时立即声明,并在我不再需要它时释放它。

假设我有一个实时项目,因此 IplImages 总是被覆盖以生成新的,并使用以下行进行声明/发布:

IplImage*image=cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
cvReleaseImage(&image);

优化内存使用的最佳方法是什么?

最佳答案

您也可以有一个 IplImage 指针,然后每次使用 cvCreateImageHeader 填充标题,使用 cvSetData 填充缓冲区中的图像数据。最后你可以使用 cvReleaseImageHeader 来释放它。

IplImage *m_img_show = NULL;
CvSize cv_img_size = cvSize(m_width,m_height);
m_img_show = cvCreateImageHeader(cv_img_size, IPL_DEPTH_8U,3);

每次都使用它来填充来自 m_pBuffer 的图像。

cvSetData(m_img_show, m_pBuffer, m_width*3);

最后释放头部和图像数据缓冲区

cvReleaseImageHeader(&m_img_show);

关于c++ - 关于声明/释放 IplImages 的两种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563151/

相关文章:

java - OpenCV-从图像中去除噪声

c++ - 创建无需任何外部执行即可连续监听的守护进程文件

c++ - 为什么设备代码中推力::reduce的迭代范围限制为2048个 double ?

visual-studio - 无需外部可执行文件的 VS 2010 构建操作

python - 裁剪功能后字母模糊/模糊

c++ - 如何判断棋盘上是否有棋子?

c++ - 为什么这个简单的 lambda 在 std::thread 中始终比在 gcc 4.9.2 的 main 函数中运行得更快?

c++ - Stroustrup 的 PPP 书中的多边形问题

c++ - 类没有合适的运算符->

visual-studio - Visual Studio 升级建议 2008/2010