Learning Opencv第三章(1)

1.Opencv2.3.1的基本数据类型定义在:
        ../OpenCV-2.3.1/modules/core/include/opencv2/core/types_c.h中。

2.基本数据类型
    (1)CvPoint、CvPoint2D32f、CvPoint3D32f定义如下:
            typedef struct CvPoint
            {
                    int x;
                    int y;
            }
            CvPoint;    
            
            /*坐标为单精度浮点型*/
            typedef struct CvPoint2D32f
            {
                    float x;
                    float y;
            }
            CvPoint2D32f;
            
            /*3维坐标点*/
            typedef struct CvPoint3D32f
            {
                    float x;
                    float y;
                    float z;
            }
            CvPoint3D32f;
        
        (2)CvSize、CvSize2D32f 图像的大小
            typedef struct
            {
                    int width;
                    int height;
            }
            CvSize;    
            typedef struct CvSize2D32f
            {
                    float width;
                    float height;
            }
            CvSize2D32f;
            
        (3)CvRect 图像的部分区域
            typedef struct CvRect
            {
                    int x;
                    int y;
                    int width;
                    int height;
            }
            CvRect;
        以上数据类型都根据其名称定义构造函数
        
        (4)CvScalar RGBA
        typedef struct CvScalar
        {
                double val[4];
        }
        CvScalar;
    有三个构造函数: CvScalar()需要一个、两个、三个、或者四个参数,分别赋给数组val[]中的相应元素。
                    CvRealScalar()需要一个参数传给val[0],其它的置为0.
                    CvScalarAll()需要一个参数传给val[0],其它的=val[0].
                    
                    
3.矩阵和图像类型
    (1)IplImage:通常所说图像的基本编码结构,可以用于灰度图、彩色、或者4通道(RGB+alpha)的图像。
            IplImage由CvMatM派生,CvMat由CvArr派生。
    (2)CvMat矩阵结构
        <1>CvMat中没有向量(vector),用列矩阵或者行矩阵代替。
        <2>矩阵元素并非只能是简单的数值类型.
        创建一个二维矩阵:
            CvMat* cvCreateMat(int rows,int cols,int type);
                    para:type---CV_<bit depth><S|U|F>C<number of channels>
                        例如:CV_8UC1:8比特无符号的单通道图像。
        CvMat矩阵头:
            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;
            
    (2)矩阵的创建
        创建矩阵有两种方法:
        <1>cvCreateMat(),这个函数有多个原函数组成,如cvCreateMatHeader(),cvCreateData(),
                分别创建矩阵头(不为数据分配内存)和为数据分配内存。
        <2>cvCloneMat(),用已经存在的矩阵创建另一个矩阵。可以用cvReleaseMat(**CvMat)释放。

        eg.
         //Create a new rows by cols matrix of type ‘type’.
        
        CvMat* cvCreateMat( int rows, int cols, int type );
        // Create only matrix header without allocating data
        
        CvMat* cvCreateMatHeader( int rows, int cols, int type );
        // Initialize header on existing CvMat structure
    
        CvMat* cvInitMatHeader(CvMat* mat,
                                                        int
                                                        rows,
                                                        int
                                                        cols,
                                                        int
                                                        type,
                                                        void* data = NULL,
                                                        int
                                                        step = CV_AUTOSTEP);
        // Like cvInitMatHeader() but allocates CvMat as well.
        
            CvMat cvMat(
            int
            rows,
            int
            cols,
            int
            type,
            void* data = NULL
          );
        // Allocate a new matrix just like the matrix ‘mat’.
        
        CvMat* cvCloneMat( const cvMat* mat );
        // Free the matrix ‘mat’, both header and data.
      void cvReleaseMat( CvMat** mat );
        
        查询矩阵:
        cvGetElemType();//得到矩阵的数据类型
        cvGetDims();//得到矩阵维数
        cvGetDimSize();//得到指定维的大小
        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值