zoukankan      html  css  js  c++  java
  • opencv学习心得(四)——opencv提取截获图像

    首先确定选区区域,这里利用鼠标选取区域具体操作看opencv学习心得(一)。

    下面就是从感兴趣区域选取图像。

    第一:创建图像空间,大小与rect相同。

    第二:利用setroi选取区域。

    第三:一定要复制图像。

    之后就是显示,很简单。

    上代码:

    IplImage *dst=cvCreateImage(cvSize(rect.width,rect.height),8,3);
    cvSetImageROI(pFrame,rect);//选取感兴趣区域
    cvCopy(pFrame,dst);//复制图像
    cvNamedWindow("dst",1);  
    cvShowImage("dst",dst); 

    下面顺便讲讲:cvcopy、cvclone,cvcopyimage,cvcloneimage.

    cvCloneImage、cvCopyImage和cvCloneMat、cvCopyMat这几个函数的误用,cvCloneImage与cvCloneMat是在赋值的同时会开辟一个新的空间给定义的变量,cvCopyImage与cvCopyMat只复制值,并不会分配一个空间给赋值对象,因此cvCloneImage与cvCloneMat只适合用于变量开始定义,千万不要用在算法处理中间,否则会产生一个新的地址空间,会将赋值对象的指针地址改变,这样会导致整个程序有不可预测的错误发生,最明显的就是你本来想把子函数中的新变量值送回上一层函数,但是由于指针的指向已经改变,所以返回后的值并不会改变。在程序中间进行复制时候建议使用cvCopyImage与cvCopyMat。

    cvCopy的原型是:
    void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
    在使用这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。cvCopy会把src中的数据复制到dst的内存中。

    cvCloneImage的原型是:

    IplImage* cvCloneImage( const IplImage* image );
    
    
    
    IplImage *src;
    IplImage *dst;
    dst = cvCloneImage(src);
    就是直接把src这个图像复制给dst,不用给dst特地开辟内存空间了,即不用写dst = cvCreateImage(cvGetSize(src),8,3).

    clone是把所有的都复制过来,也就是说不论你是否设置Roi,Coi等影响copy的参数,clone都会原封不动的克隆过来。
    copy就不一样,只会复制ROI区域等。用clone复制之后,源图像在内存中消失后,复制的图像也变了,而用copy复制,源图像消失后,复制的图像不变


  • 相关阅读:
    (转)SpringBoot使用@Value给静态变量注入
    关于Oracle to_date函数的高级用法
    Nginx实践篇(5)- Nginx代理服务
    SpringBoot @Autowired中注入静态方法或者静态变量
    SpringBoot MAVEN编译报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:
    SpringBoot项目中禁用HttpClient那些嘈杂的日志
    生成SQL Server数据字典
    SqlServer 查看最近执行过的语句
    为二级域名注册ssl证书,并强制使用https对http进行跳转
    CentOS 7 配置nginx并默认强制使用https对http进行跳转
  • 原文地址:https://www.cnblogs.com/polly333/p/4498444.html
Copyright © 2011-2022 走看看