Opencv:IplImage*转Mat后的内存泄露问题
2017-04-21 18:25
323 查看
用Windows的API获得一个BMP的句柄,并将其转换到IplImage格式,然后再转到Mat类型。但在这里注意到会发生一个内存泄露的问题,记录下来。
Mat类型默认是浅拷贝,深拷贝需要在构造函数中加入true标识。
IplImage类型是一个结构体,其指针所指向的内容可以作为Mat类型的构造参数。
在temp返回的值赋予的变量离开其作用域时,会调用析构函数,释放其拥有的空间,但并不会释放p指向的那一块空间,因为p非智能指针,其指向的区域除非手动释放,否则将会一直存在于程序中。因此此处应使用深拷贝:
Mat类型默认是浅拷贝,深拷贝需要在构造函数中加入true标识。
Mat a = Imread("pic.bmp"); Mat b = a;//浅拷贝,a和b公用一块数据 Mat b = Mat(a,true);//深拷贝,b将复制a的内容
IplImage类型是一个结构体,其指针所指向的内容可以作为Mat类型的构造参数。
... IplImage* p = hBitmapToIpl(hbmp); Mat temp = Mat(p); return temp;
在temp返回的值赋予的变量离开其作用域时,会调用析构函数,释放其拥有的空间,但并不会释放p指向的那一块空间,因为p非智能指针,其指向的区域除非手动释放,否则将会一直存在于程序中。因此此处应使用深拷贝:
IplImage* p = hBitmapToIpl(hbmp); Mat temp = Mat(p, true);//深拷贝 因为p的内容不会被M释放掉 存在内存泄露 cvReleaseData(p);
相关文章推荐
- Android MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- opencv3.0之后IPLimage转换成MAT的问题
- OpenCV中的内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- OpenCV经常会出现一些内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Android 性能优化之使用MAT分析内存泄露问题
- Opencv中cvLoadImage内存泄露问题
- opencv中cvLoadImage和cvCloneImage的内存泄露问题
- MFC和opencv一起使用时会莫名奇妙出现内存泄露问题
- OpenCV中IplImage*转化为cv::mat时出现的问题
- Android 性能优化之使用MAT分析内存泄露问题
- openCV人脸检测内存泄露问题