博客
关于我
强烈建议你试试无所不能的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://jspci.baihongyu.com/

你可能感兴趣的文章
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>
VMware Workstation Pro虚拟机不可用解决方法
查看>>
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>