zoukankan      html  css  js  c++  java
  • Mat ,IplImage, CvMat 之间的转换的总结


    在新版本与旧版本之间纠结,到底是用Mat,还是Iplimage?   

            Mat 侧重于数据计算,而Iplimage注重于图像的处理。

    因此,应根据具体需要灵活使用,那个好用用哪个,只要在两者之间进行转换即可。


    一、派生关系:CvArr -> CvMat -> IplImage


       IplImageCvMat派生,而CvMatCvArr派生

       CvArr用作函数的参数,无论传入的是CvMatIplImage,内部都是按CvMat处理。


    二、转换方式:


    1.  IplImage,CvMat 向Mat  转换:

        主要利用Mat的构造函数

        Mat::Mat(const CvMat* m, bool copyData=false);

         因为IplImage是从CvMat派生而来,所以,两者的转换都采用该函数。其中,copyData表示是否复制数据。

        例:

                 CvMat  mI  ;

              Mat  I=Mat(mI);

    2. Mat  向  IplImage,CvMat 转换:

    (1)文件头的复制,只创建文件头,不复制数据

             Mat  I;

             IplImage  pI = I;或  IplImage  pI = IplImage (I);

             CvMat  mI  = I;


    (2)指针转换,需要调用IplImage和CvMat运算符得到指针,为了得到指针需要使用&符号:

            Mat  I;

            IplImage*  pI = &I.operator IplImage(); 或 IplImage*  pI = &(IplImage(I));  

            CvMat*  mI = &I.operator CvMat();


    3.CvMat 与 IplImage的转换

    (1)CvMat 转向 IplImage

             CvMat*  mat_origin;//可以          IplImage  img_buffer ;

             cvGetImage(mat_origin,&img_buffer);

    (2) IplImage转向CvMat         

     

               法1只生成一个新的矩阵头,而数据都指向原来的地址

                         CvMat mathdr, 

                         *mat = cvGetMat( img, &mathdr );

                          其中, cvGetMatconst CvArr* arr, CvMat* header)

               法2:CvMat *mat = cvCreateMat( img->height, img->width, CV_64FC3 );
                        cvConvert( img, mat );

  • 相关阅读:
    史上最全最新java面试题合集二(附答案)
    史上最全最新Java面试题合集一(附答案)
    修改vsftpd的默认根目录/var/ftp/pub到其他目录
    重置密码解决MySQL for Linux错误:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    虚拟机下的Linux连接校园网上网问题
    CentOS7 安装Chrome
    CentOS7 卸载Firefox
    100个写作高级词
    【二叉搜索树】的详细实现(C++)
    【红黑树】的详细实现(C++)
  • 原文地址:https://www.cnblogs.com/ssjie/p/4958975.html
Copyright © 2011-2022 走看看