手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题
2024-09-02 05:22:12
最近准备重新学习图像处理的知识,主要目的是自己实现一遍图像处理的算法,所以除了读取、保存图像外的操作都自己写,没想到直接封装OpenCV的读取、保存功能的第一步就出错。关键代码如下
void MyImage::Clear()
{
if (m_pImg != nullptr)
{
std::cout << "释放内存" << std::endl;
delete m_pImg;
m_pImg = nullptr;
}
}
其中m_pImg是IplImage*类型,析构函数调用Clear函数。在主函数里用窗口显示图像,关闭后就成了这样子了
打开图像时没问题,关闭显示窗口后就出现错误。
Debug Assertion Failed!
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
是典型的内存泄露的表现。
原来是OpenCV中对于IplImage的内存释放是严格要用cvReleaseImage函数的,毕竟delete对应的是new,而IplImage*不是用new来申请内存,而是用cvCreateImage或cvLoadImage这种封装了申请内存的方法。所以不能习惯性地对指针用delete,把那段改成cvReleaseImage(&m_pImg);即可
最新文章
- tiny6410在I2c用户态中的程序设计eeprom
- centos 安装 mysql5.7.9初始密码问题
- html5 svg
- 什么是 Unix 以及它为什么这么重要?
- 转:SQL Server 批量插入数据的两种方法
- Android强制设置横屏或竖屏
- Struts工作流程
- E - Just a Hook - hdu 1698(区间覆盖)
- Config配置文件读写
- java IoC
- std::shared_ptr<;void>;的工作原理
- notify丢失、虚假唤醒
- Git 配置用户名、密码
- mysql 状态锁 连接数
- 05-树8 File Transfer (25 分)
- Vue实例:演示input 和 textarea 元素中使用 v-model 实现双向数据绑定
- java学习之路--继承(多态的动态绑定)
- windows下怎么生成github的ssh公钥
- Oracle sqlldr导入之“MAXIMUM ERROR COUNT EXCEEDED”
- java 解析txt/html文件
热门文章
- 对一致性Hash算法,Java代码实现的深入研究(转)
- lambda表达式 <;二>;
- java中+=详解 a+=b和a=a+b的区别
- GridView 控制默认分页页码间距 及字体大小
- MPAndroidChart Wiki(译文)~Part 5
- css 添加伪元素 消除浮动 对父元素高度产生的影响
- 移动端 css 禁止长按屏幕选中
- oracle 查询XML操作、操作系统文件
- 【Python爬虫学习笔记(1)】urllib2库相关知识点总结
- 表单验证——jquery validate使用说明