• openc下cv::Mat和IplImage的相互转换


    opencv2.0的类CV::Mat和opencv1.0的IplImage之间烦人转换:

    cv::Mat matimg = cv::imread ("girl.jpg");
    
    IplImage* iplimg;
    
    *iplimg = IplImage(matimg);
    
     
    
    IplImage* iplimg = cvLoadImage("girl.jpg");
    
    cv::Mat matimg;
    
    matimg = cv::Mat(iplimg);

    实际上尽量用2.0,因为opencv2.0是用c++写的很棒,没有指针问题一说。c的指针要自己小心小心噢。

    MatMat 与 IplImage 和  CvMat 的转换:
    在 OpenCV 2 中虽然引入了方便的 , 出于兼容性的考虑, OpenCV依然是支持C语言接口的IplImage和CvMat结构。如果你要与以前的代码兼容, 将会涉及 MatMatMat与 IplImage和 CvMat的转换。

     Mat转为IplImage和CvMat格式:

      Mat img(Size(320,240),CV_8UC3);
      ......
      IplImage iplimg = img;//转为IplImage结构
    
    如何要转成CvMat类型:
        CvMat cvimg =img;//转为CvMat

    需要注意的是,类型转换后IplImage和CvMat、Mat共用一个矩阵数据。IplImage和CvMat没有计数功能,img数据释放,那么IplImage和CvMat也就失去数据了。

    IplImage和CvMat格式转为Mat

    Mat有二个构造函数,可以实现iplimage和CvMat到Mat的转换。这两个函数都有一参copyData。如果copyData的值是 false,那么MatMatMat将与IplImage或CvMat共用同一矩阵数据;如果值是true,Mat会新申请内存,然后将会新申请内存,然后将 IplImage或 CvMatCvMat CvMat的数据复制到 Mat的数据区。

    如果共用数据,Mat也将不会使用引计数来管理内存,需要开发者 不会使用引计数来管理内存。建议做此转换是将参数置为true,这样内存管理变得简单 。

    Mat::Mat(const Cvmat *m,bool copyData=false)
    Mat::Mat(const IplImage *img,bool copyData=false)
    ===================
    ImlImage *iplimg = cvLoadImage("girl.jpg");
    Mat im(iplimg,true);

     

  • 相关阅读:
    ObjectiveC初步研究 实现文件(Implementation File)
    SQL技巧(二) CTE(公用表达式)初步接触
    ObjectiveC编程基础
    Linux编程 使用C在mysql中插入数据
    办理户口
    修改kernel内核HZ频率没有效果问题
    如何从湖北省人才市场将户口迁移出来?
    查看 各种寄存器值的 内核模块 C语言
    SDRAM AND SRAM
    linux2.6.26内核中ARM中断实现详解(转)
  • 原文地址:https://www.cnblogs.com/usegear/p/4859704.html
Copyright © 2020-2023  润新知