博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cvQueryFrame获取的图像和cvReleas…
阅读量:4051 次
发布时间:2019-05-25

本文共 748 字,大约阅读时间需要 2 分钟。

   在项目中需要从原始图像中截取感兴趣的子区域保存,于是利用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方法中。

转载地址:http://nspci.baihongyu.com/

你可能感兴趣的文章
和机器学习和计算机视觉相关的数学
查看>>
论文MICO for MRI bias field estimation and tissue segmentation品讲
查看>>
后现代
查看>>
VMware6关机后出现is not a valid virtual machine configuration file的解决办法
查看>>
通过ASP实现flash对数据库的访问
查看>>
“==”和equals方法究竟有什么区别?
查看>>
哈佛图书馆墙上的20条训言
查看>>
交流引发深入思考
查看>>
保持我们母语的纯洁
查看>>
免费的互联网时代如何盈利?
查看>>
可怕的宣传力量
查看>>
症状:可以上网,可以上QQ,不能登陆360安全卫士,360浏览器无法同步,有道词典等无法登陆,无法查询。
查看>>
重读《触龙说赵太后》
查看>>
2010的第一次思想触动
查看>>
文学大师做菜艺术20个"须知"
查看>>
SVN + 批处理 + Dropbox + TeamViewer实现远方协同工作
查看>>
vc学习之关于缩放到托盘区
查看>>
vc学习之键盘事件OnKeyDown
查看>>
近期工作
查看>>
春寒料峭,原来春天这样走近
查看>>