zoukankan      html  css  js  c++  java
  • 【原】OPenCV学习笔记2:Mat 和cvMat

    cv::Mat和CvMat都可以表示图像数据,其中cv::Mat是一个类(Class),是C++接口,而CvMat是一个Struct,从类型上就可以知道二者存在很大区别。前者除了几个成员变量之外还有很多的成员函数和重载函数,可以实现很多的图像数据处理功能,而后者只有几个成员变量,要对其成员进行一些处理,需要借用别的函数。

    下面是CvMat的定义:

    View Code
    typedef struct CvMat
    {
        int type;
        int step;
    
        /* for internal use only */
        int* refcount;
        int hdr_refcount;
    
        union                                               //数据的指针
        {
            uchar* ptr;
            short* s;
            int* i;
            float* fl;
            double* db;
        } data;
    
    #ifdef __cplusplus   
        union
        {
            int rows;
            int height;
        };
    
        union
        {
            int cols;
            int width;
        };
    #else
        int rows;
        int cols;
    #endif
    
    }
    CvMat;

    cv::Mat的使用完全当作C++的类使用

    Mat提供了很多的重载的构造函数:

    View Code

    用Mat类取代了之前用extended C写的cvMat和lplImage,更加好用啦,最大的好处就是更加方便的进行内存管理

    输出Mat里面的元素:用Scalar初始化。

    Mat mat(4,4,CV_32FC2,Scalar(1,3));
    Mat m(2,2,CV_8UC3,Scalar(0,0,255));
    cout<<mat<<endl<<endl;
    cout<<m<<endl<<endl;

    传统的IplImage可以转化为Mat格式:利用构造函数Mat(const IplImage* img, bool copyData=false);

    // 构造函数Mat(const IplImage* img, bool copyData=false);
    IplImage * img=cvLoadImage("lena.jpg",1);
    Mat mtx(img);

    从Mat到IplImage:

    Mat image;
    IplImage*pi=&image.operator IplImage();
    CvMat* ci=&image.operator CvMat();

    cv::Mat还有其他有点:

    1.Mat结构更加友好,很多操作更接近matlab的风格

    2.也有Point2f,Point3f,vector等数据结构可以使用

    3.RNG类可以产生随机数

    4.实现颜色通道的分离使用函数split

  • 相关阅读:
    Android开发-API指南-服务
    Android开发-API指南-<uses-sdk>
    User Experience Questionnaire (UEQ)
    Git Remote (转)
    Start and Stop Bitbucket Server
    Bitbucekt Reference
    JIRA reference
    Glassfish 4 修改server.log 等配置
    SVN Trunk Tag Branch
    设置eclipse的Maven插件引入依赖jar包后自动下载并关联相应的源码(转)
  • 原文地址:https://www.cnblogs.com/dakou/p/3026390.html
Copyright © 2011-2022 走看看