cvQueryFrame获取的图像和cvReleas…

   在项目中需要从原始图像中截取感兴趣的子区域保存,于是利用cvCopy就写了个cvSubImage方法:

2010-08-26 10:19:

void cvSubImage(IplImage* srcImage, CvRect rect, IplImage* destImage)
{
//从图像orgImage中提取一块(rectInImage)子图像imgRect
  cvSetImageROI(srcImage,rect);//设置感兴趣的区域,则下面的操作都只针对该区域
  cvCopy(srcImage,destImage);
  cvResetImageROI(srcImage);//释放感兴趣区域,则整个图像被选中
}
对于一般的图像是没有问题的,然而从摄像头或文件中抓取的帧图像就出现了内存释放问题:

Unknown error code -49 (Deallocation error) 
in function cvFree_, \opencv\cxcore\src\cxalloc.cpp(129) 

后来将cvResetImageROI(srcImage);这句注释掉后,程序运行正常。感觉很奇怪,通过cvQueryFrame方法从摄像头或文件中抓取的帧图像是不能被释放和修改的,而cvResetImageROI好像也没用修改帧图像吧?看了opencv帮助文档里,发现可以用cvSetImageROI( image, cvRect( 0, 0, image->width, image->height ));来代替cvResetImageROI方法,可是还是不行。没办法,只能在调用前先给cvQueryFrame得到的图像进行clone一份,然后作为参数传递到subImage方法中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值