Opencv:IplImage*转Mat后的内存泄露问题

用Windows的API获得一个BMP的句柄,并将其转换到IplImage格式,然后再转到Mat类型。但在这里注意到会发生一个内存泄露的问题,记录下来。
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);
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值