• opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar


    转自http://blog.csdn.net/gdut2015go/article/details/46301821

    opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar

    1)CvPoint:表示一个坐标为整数的二维点,是一个包含integer类型成员x和y的简单结构体。

    typedef  struct  CvPoint
    {
        int x;//图像中点的x坐标
        int y;//图像中点的y坐标
    }CvPoint;
    给结构体CvPoint取别名,以后可以直接用CvPoint来命名变量,每个变量包含两个数据坐标。

    函数原型:CV_INLINE   CvPoint   cvPoint( int x, int y )
    {
        CvPoint p;
        p.x = x;
        p.y = y;
       return p;
    }

    变体类型:

    CvPoint2D32f   //float x,y  二维空间中的点
    CvPoint2D64f  //double类型
    CvPoint3D32f //float x, y, z 三维空间中的点

    CvPoint3D64f   //double类型


    原型:typedef structCvPoint2D32f
    {
        float x;
        float y;
    }CvPoint2D32f; 这个原型跟CvPoint的原理是一样的,只是数据的类型不同而已。


    二维浮点型数据:

    CV_INLINE  CvPoint2D32f  cvPoint2D32f( double x, double y )
    {
        CvPoint2D32f p;
        p.x = (float)x;
        p.y = (float)y;
        return p;
    }


    类型转换:

    将整形数据转换为浮点型数据:
    CV_INLINE  CvPoint2D32f  cvPointTo32f( CvPoint point )
    {
        return cvPoint2D32f( (float)point.x, (float)point.y );
    }   //把整型数据转换为32位浮点型数据,这个很容易理解。 


    将浮点型数据转换为整形数据:

    CV_INLINE  CvPoint  cvPointFrom32f( CvPoint2D32f point )
    {
        CvPoint ipt;
        ipt.x = cvRound(point.x);
        ipt.y = cvRound(point.y);
        return ipt;

    }  //把32位浮点型数据转换为整型数据。这个很容易理解。


    cvRound

    原型是:int cvRound (double value)
    作用是:对一个double型的数进行四舍五入,并返回一个整型数!

    函数 cvRound, cvFloor, cvCeil 用一种舍入方法将输入浮点数转换成整数。 cvRound 返回和参数最接近的整数值。 cvFloor 返回不大于参数的最大整数值。
    cvCeil 返回不小于参数的最小整数值。在某些体系结构中该函数 工作起来比标准 C 操作起来还要快。


    2)CvSize:表示矩阵框大小,以像素为精度。

    与CvPoint结构类似,但数据成员是integer类型的width和height。

    typedef struct
    {
        int width;/* 矩形宽 */
        int height; /* 矩形高 */
    }
    CvSize;

    CV_INLINE  CvSize  cvSize( int width, int height )
    {
        CvSize s;
        s.width = width;
        s.height = height;
        return s;
    }

    变体类型:CvSize2D32f  表示浮点型数据


    3)CvRect:通过方形左上角坐标和方形的高和宽来确定一个矩形区域

    typedef struct CvRect   

    {   

    int x; /* 方形的左上角的x-坐标 */   
    int y; /* 方形的左上角的y-坐标*/   
    int width; /* 宽 */   

    int height; /* 高 */   

    }   

    //包含4个成员元素,其中x,y用来确定区域左上角的坐标,width和height确定区域大小。全都是整型数据。


    CV_INLINE  CvRect  cvRect( int x, int y, int width, int height )
    {
        CvRect r;
        r.x = x;
        r.y = y;
        r.width = width;
        r.height = height;
        return r;

    }


    4)CvScalar :这个 CvScalar就是一个可以用来存放4个double数值的数组(O'Reilly的书上写的是4个整型成员);一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的。

    typedef struct CvScalar
    {
        double val[4];
    }
    CvScalar;

    CV_INLINE  CvScalar  cvScalar( double val0, double val1 CV_DEFAULT(0),

    double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))
    {
    CvScalar scalar;
    scalar.val[0] = val0; 
    scalar.val[1] = val1;
    scalar.val[2] = val2; 
    scalar.val[3] = val3;
    return scalar;
    }

    cvScalar包含4个double类型的数值,分别是val[0],val[1],val[2]和val[3]。这个很容易与前面几个类型混淆,要注意区分清楚。

    下面又4个cvScalar类型的函数:

    1. inline CvScalar cvScalar( double val0, double val1=0,double val2=0, double val3=0 );

    //最通用的,可初始化0-4个通道
    举例:
    a) 存放单通道图像中像素:cvScalar(255);
    b) 存放三通道图像中像素:cvScalar(255,255,255);


    2. inline CvScalar cvRealScalar( double val0 );

    //只使用第一个通道,val=val0;等同于cvScalar(val0,0,0,0);

    3. inline CvScalar cvScalarAll( double val0123 );
    //所用通道值用同一个val0123赋值

    4. CV_RGB
    CV_RGB是OPENCV中的一个宏,用于创建一个色彩值:
    #define CV_RGB(r,g,b) cvScalar((b),(g),(r),0)。

    看到转换为cvScalar时,rgb的顺序变为bgr,这是因为opencv中存储RGB模式彩图时,采用的通道顺序是BGR.


    两个变体类型:cvRealScalar,cvScalarAll

    CV_INLINE  CvScalar  cvRealScalar( double val0 )
    {
        CvScalar scalar;
        scalar.val[0] = val0;
        scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;
        return scalar;
    }

    cvRealScalar函数变体的意义是:只使用1个val[0]的值,其他3个值全部默认为0。


    CV_INLINE  CvScalar  cvScalarAll( double val0123 )
    {
        CvScalar scalar;
        scalar.val[0] = val0123;
        scalar.val[1] = val0123;
        scalar.val[2] = val0123;
        scalar.val[3] = val0123;
        return scalar;

    }

    cvScalarAll的意义是全部值都设置为val0123。

    5)cvRectangle:通过对角线上的两个顶点绘制简单、指定粗细或者带填充的矩形

    函数原型:

    void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, 

    CvScalar color,int thickness=1, int line_type=8, int shift=0 );

    参数介绍:
    img -- 图像.
    pt1 -- 矩形的一个顶点。
    pt2 -- 矩形对角线上的另一个顶点
    color -- 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。

    thickness -- 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。

    line_type -- 线条的类型。见cvLine的描述

    shift -- 坐标点的小数点位数。

    opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar

    1)CvPoint:表示一个坐标为整数的二维点,是一个包含integer类型成员x和y的简单结构体。

    typedef  struct  CvPoint
    {
        int x;//图像中点的x坐标
        int y;//图像中点的y坐标
    }CvPoint;
    给结构体CvPoint取别名,以后可以直接用CvPoint来命名变量,每个变量包含两个数据坐标。

    函数原型:CV_INLINE   CvPoint   cvPoint( int x, int y )
    {
        CvPoint p;
        p.x = x;
        p.y = y;
       return p;
    }

    变体类型:

    CvPoint2D32f   //float x,y  二维空间中的点
    CvPoint2D64f  //double类型
    CvPoint3D32f //float x, y, z 三维空间中的点

    CvPoint3D64f   //double类型


    原型:typedef structCvPoint2D32f
    {
        float x;
        float y;
    }CvPoint2D32f; 这个原型跟CvPoint的原理是一样的,只是数据的类型不同而已。


    二维浮点型数据:

    CV_INLINE  CvPoint2D32f  cvPoint2D32f( double x, double y )
    {
        CvPoint2D32f p;
        p.x = (float)x;
        p.y = (float)y;
        return p;
    }


    类型转换:

    将整形数据转换为浮点型数据:
    CV_INLINE  CvPoint2D32f  cvPointTo32f( CvPoint point )
    {
        return cvPoint2D32f( (float)point.x, (float)point.y );
    }   //把整型数据转换为32位浮点型数据,这个很容易理解。 


    将浮点型数据转换为整形数据:

    CV_INLINE  CvPoint  cvPointFrom32f( CvPoint2D32f point )
    {
        CvPoint ipt;
        ipt.x = cvRound(point.x);
        ipt.y = cvRound(point.y);
        return ipt;

    }  //把32位浮点型数据转换为整型数据。这个很容易理解。


    cvRound

    原型是:int cvRound (double value)
    作用是:对一个double型的数进行四舍五入,并返回一个整型数!

    函数 cvRound, cvFloor, cvCeil 用一种舍入方法将输入浮点数转换成整数。 cvRound 返回和参数最接近的整数值。 cvFloor 返回不大于参数的最大整数值。
    cvCeil 返回不小于参数的最小整数值。在某些体系结构中该函数 工作起来比标准 C 操作起来还要快。


    2)CvSize:表示矩阵框大小,以像素为精度。

    与CvPoint结构类似,但数据成员是integer类型的width和height。

    typedef struct
    {
        int width;/* 矩形宽 */
        int height; /* 矩形高 */
    }
    CvSize;

    CV_INLINE  CvSize  cvSize( int width, int height )
    {
        CvSize s;
        s.width = width;
        s.height = height;
        return s;
    }

    变体类型:CvSize2D32f  表示浮点型数据


    3)CvRect:通过方形左上角坐标和方形的高和宽来确定一个矩形区域

    typedef struct CvRect   

    {   

    int x; /* 方形的左上角的x-坐标 */   
    int y; /* 方形的左上角的y-坐标*/   
    int width; /* 宽 */   

    int height; /* 高 */   

    }   

    //包含4个成员元素,其中x,y用来确定区域左上角的坐标,width和height确定区域大小。全都是整型数据。


    CV_INLINE  CvRect  cvRect( int x, int y, int width, int height )
    {
        CvRect r;
        r.x = x;
        r.y = y;
        r.width = width;
        r.height = height;
        return r;

    }


    4)CvScalar :这个 CvScalar就是一个可以用来存放4个double数值的数组(O'Reilly的书上写的是4个整型成员);一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的。

    typedef struct CvScalar
    {
        double val[4];
    }
    CvScalar;

    CV_INLINE  CvScalar  cvScalar( double val0, double val1 CV_DEFAULT(0),

    double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))
    {
    CvScalar scalar;
    scalar.val[0] = val0; 
    scalar.val[1] = val1;
    scalar.val[2] = val2; 
    scalar.val[3] = val3;
    return scalar;
    }

    cvScalar包含4个double类型的数值,分别是val[0],val[1],val[2]和val[3]。这个很容易与前面几个类型混淆,要注意区分清楚。

    下面又4个cvScalar类型的函数:

    1. inline CvScalar cvScalar( double val0, double val1=0,double val2=0, double val3=0 );

    //最通用的,可初始化0-4个通道
    举例:
    a) 存放单通道图像中像素:cvScalar(255);
    b) 存放三通道图像中像素:cvScalar(255,255,255);


    2. inline CvScalar cvRealScalar( double val0 );

    //只使用第一个通道,val=val0;等同于cvScalar(val0,0,0,0);

    3. inline CvScalar cvScalarAll( double val0123 );
    //所用通道值用同一个val0123赋值

    4. CV_RGB
    CV_RGB是OPENCV中的一个宏,用于创建一个色彩值:
    #define CV_RGB(r,g,b) cvScalar((b),(g),(r),0)。

    看到转换为cvScalar时,rgb的顺序变为bgr,这是因为opencv中存储RGB模式彩图时,采用的通道顺序是BGR.


    两个变体类型:cvRealScalar,cvScalarAll

    CV_INLINE  CvScalar  cvRealScalar( double val0 )
    {
        CvScalar scalar;
        scalar.val[0] = val0;
        scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;
        return scalar;
    }

    cvRealScalar函数变体的意义是:只使用1个val[0]的值,其他3个值全部默认为0。


    CV_INLINE  CvScalar  cvScalarAll( double val0123 )
    {
        CvScalar scalar;
        scalar.val[0] = val0123;
        scalar.val[1] = val0123;
        scalar.val[2] = val0123;
        scalar.val[3] = val0123;
        return scalar;

    }

    cvScalarAll的意义是全部值都设置为val0123。

    5)cvRectangle:通过对角线上的两个顶点绘制简单、指定粗细或者带填充的矩形

    函数原型:

    void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, 

    CvScalar color,int thickness=1, int line_type=8, int shift=0 );

    参数介绍:
    img -- 图像.
    pt1 -- 矩形的一个顶点。
    pt2 -- 矩形对角线上的另一个顶点
    color -- 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。

    thickness -- 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。

    line_type -- 线条的类型。见cvLine的描述

    shift -- 坐标点的小数点位数。

  • 相关阅读:
    WebView.自动登录
    Android.对话框(AlertDialog/Toast/Snackbar)
    ubuntu解压rar
    sqlserver2005 存储过程模板及调用
    win7 32位下装oracle 10g报未知错误
    oracle下常用查询更新命令(身份证号判断男女,更新语句多表查询)
    如何建立一个android工程
    ubuntu14.04 配置android及sdk等相关操作
    mysql 常用简单的几个命令
    linux的tar简单使用
  • 原文地址:https://www.cnblogs.com/feifanrensheng/p/7896135.html
Copyright © 2020-2023  润新知