手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题

最近准备重新学习图像处理的知识,主要目的是自己实现一遍图像处理的算法,所以除了读取、保存图像外的操作都自己写,没想到直接封装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);即可

时间: 2024-10-15 08:05:09

手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题的相关文章

封装函数实现存储和读取的功能

需求: 在全局中只有一个namespace函数, 可以实现两种功能, 一种是存储数据,另一种是读取数据 存储数据的时候: namespace('a.b.c', 123); 读取数据的时候: namespace('a.b.c') => 123 读取: namespace('a.b') => {c: 123} 读取: namespace('a') => {b: {c: 123}} a:{ b: { c: 123 } } 该函数可以实现两种功能: 第一种是可以存储数据: 当存储数据的时候需要接

有关OpenCV1.0中GUI命令的几个函数学习总结

1.修改窗口背景色或者光标形状 在OpenCV1.0版本利用函数int cvNamedWindow( const char* name, int flags )初始化创建一个窗口后,窗口的背景色是灰色,光标形状是十字线,通过如下方法改变这些窗口属性: 第一种方法是从源头直接修改.(1) 打开OpenCV安装目录下的_make文件夹,使用VC6.0打开opencv.dsw工程,打开文件”…\\highgui\\window_win32.cpp” 找到函数CV_IMPL int cvInitSyst

vs2013下配置opencv1.0.0

vs2013下配置opencv1.0.0 2019-4-25 17:13:13 原因 现在最新opencv已经到4.0.1版了.用opencv1.0原因: 小.源码包只有10M左右. 清晰.他的文档结构清晰,不像OpenCV2时代开始越来越多的东西加进来但是文档也越来越多看不完.. 很少有C++.比如没有Mat.因为希望在自己的项目中用纯C,即便用opencv也是用IplImage读取. 打开工程 opencv_100/_make/opencv.sln,用vs2013打开它,选择升级项目. 编译

读取保存文件、图片在数据库中的上传读取

一.输入输出流 1.概念: 输入输出流主要用于保存.读取文件,其内容保存在内存中. 2.使用方法: using System.IO; //System.IO 命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型. 3.代码段实现读取和保存功能: 读取文字: OpenFileDialog op = new OpenFileDialog(); op.ShowDialog();//打开文件对话框 //将选择的东西读取到文档里 StreamReader sd = new StreamR

MDIEMDIE双心封装版0.3.0.0 RC6V2

MDIEMDIE双心封装版0.3.0.0 RC6V2官方主页:http://cres.s28.xrea.com/ 下载地址:http://files.cnblogs.com/files/liuzhaoyzz/MDIE%E5%8F%8C%E5%BF%83%E5%B0%81%E8%A3%85%E7%89%880.3.0.0RC6V2.rarMDIE(多文档界面资源管理器)是一个MDI类型的文件管理软件,是代替资源管理器的一个无比强悍的文件管理器 .他支持VBS和JS插件扩展,提供了无限可能.他支持鼠

手动封装js原生XMLHttprequest异步请求

Code Object.extend =function(targetObj,fnJson){ //扩展方法,类似于jQuery的$.extend,可以扩展类的方法,也可以合并对象 for(var fnName in fnJson){ targetObj[fnName]=fnJson[fnName]; } return targetObj; }; HttpAjax = (function(){ function HttpAjax(options){ var settings={ type:'po

VS2003安装Opencv1.0 windows系统 win7

一.步骤 下载安装opencv1.0     安装文件我上传到百度网盘分享连接 http://pan.baidu.com/s/1skddmC9 配置电脑windows环境变量 配置VS2003全局设置 配置VS2003的开发项目 二.操作步骤 2.1. 按照上面的连接下载安装openvc 我安装在默认路径C盘 2.2. 配置电脑windows环境 在win7环境下操作步骤如下. 在计算机上点击右键—属性—高级系统设置-高级-环境变量 点击新建 在变量名中写 PATH,变量值位置输入C:\Prog

Linux下配置OpenCV1.0环境

自己一直嚷嚷着打算学学图像识别,识别个简单的,车牌号,验证码之类的,之前查过资料,OpenCV可以实现.昨天花了一个下午终于配置好环境了,今天写下总结. OpenCV这一名称包含了Open和Computer Vision两者的意思.实际上,Open指Open Source(开源,即开放源代码),Computer Vision则指计算机视觉.更详细介绍,请参考:http://zh.wikipedia.org/wiki/OpenCV 配置环境系统信息:Linux [email protected]:

VC6.0+Opencv1.0一部分安装问题的解决方法

当按照正常步骤执行安装VC6.0+Opencv1.0后,有时候还是会出现意想不到的问题.例如下面两种情况: 1.如果出现error LNK1104: 无法打开文件“cxcore.lib" . 解决办法网上大部分的建议是将library files的路径设置完整,但是有时候不能解决问题,就像是路径不起作用一样.这个时候就需要将Opencv安装路径下的lib文件夹下的所有.lib文件拷贝到你当前的工程目录下.这样会解决问题.但是应该需要每个工程都需要设置,比较麻烦. 2.“_cv.h”找不到. 有些