博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cvReleaseImage 释放内存出错
阅读量:5735 次
发布时间:2019-06-18

本文共 1363 字,大约阅读时间需要 4 分钟。

 

cvReleaseImage是OpenCV中C语言库中的释放图片内存的函数,比如我们加载或者克隆了一幅图片,当不需要这幅图片了时,我们为了避免内存泄露,需要释放这些空间,可以参见我之前的博客,其使用方法如下:

IplImage *img = cvLoadImage("Input.jpg");cvNamedWindow("Image:",1);cvShowImage("Image:",img);cvWaitKey();cvDestroyWindow("Image:");cvReleaseImage(&img);

 

如上所示的cvReleaseImage的使用方法是没有问题的,但是有两种情况下使用cvReleaseImage来释放内存会出错,需要格外小心。

1. 当使用cvCaptureFromCAM函数时

这个函数是用OpenCV来打开摄像头并捕捉摄像头的图像时需要用到的,可以参见我的另一篇博客中的代码。这个函数会建立一个CvCapture的结构体,专门用来打开或关闭摄像头的,在OpenCV的官方文档中,我们会看到下面一段话:

Note: In C API, when you finished working with video, release CvCapture structure with cvReleaseCapture(), or use Ptr<CvCapture> that calls cvReleaseCapture() automatically in the destructor.

这告诉我们使用完了CvCapture,需要用cvReleaseCapture来释放内存,那么我们就不需要再用cvReleaseImage来释放每一张图像的内存了。官方文档中还有另一段注意事项:

Note :OpenCV 1.x functions cvRetrieveFrame and cv.RetrieveFrame return image stored inside the video capturing structure. It is not allowed to modify or release the image! You can copy the frame using and then do whatever you want with the copy.

这里明确指出了从摄像头获取的图片不能被修改和释放,所以如果我们对捕获的图像调用cvReleaseImage就会出错。

 

2. 当从别的图像类转为IplImage格式时

另外一种不能使用cvReleaseImage的情况是,当我们使用别的SDK时,比如FlyCapture2中的f2Image图像格式,或者是Qt5中的QImage图像格式,我们自己写函数将其转为为OpenCV中IplImage格式时,可参见我的博客,我们自己申请了一段unsigned char格式的内存来保存图像数据,使用完了后要释放的时候,也不能使用cvReleaseImage,会出错。我们只能手动释放内存,我们需要看申请这段内存使用的是new还是malloc,如果是new的内存,用delete来释放,如果是malloc的内存,用free来释放。

 

转载地址:http://zgrwx.baihongyu.com/

你可能感兴趣的文章
Windows 8上安装本地回环网卡
查看>>
一位多年老站长告白:如何用老域名让新站快速上首页
查看>>
iOS开发那些事-Passbook详解与开发案例(附视频)
查看>>
attrs.xml中declare-styleable 详解(用于自定义控件的属性)
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
严苛模式(StrictMode)
查看>>
错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法(转)
查看>>
我的工具:文本转音频文件
查看>>
Jenkins(二)
查看>>
【许晓笛】从零开始运行EOS系统
查看>>
阿里云全面支持IPv6!一文揽尽4位大咖精彩演讲
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
面试中会遇到的正则题
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>
React.js 集成 Kotlin Spring Boot 开发 Web 应用实例详解
查看>>
《图解HTTP》学习笔记(四):返回结果的HTTP状态码
查看>>