转自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 -- 坐标点的小数点位数。

opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar的更多相关文章

  1. opencv学习_4(opencv基础数据结构 CvPoint & CvSize & CvRect & CvScalar & CvArr & CvMat)

    1:包含在cxcore/include/cxtypes.h头文件中. 2:CvPoint系列   -----(x,y) CvPoint:表示图像中的点 CvPoint2D32f:二维空间中的点 CvP ...

  2. Opencv(3):基本数据类型

    1.比较简单的原子类型 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z 三 ...

  3. OpenCv中基本数据类型--Point,Size,Rect,Scalar,Vec3b类类型的详细解释

    头文件路径:opencv-2.4.9/modules/core/include/opencv2/core/core.hpp 一.Point类 在这些数据类型中,最简单的就是Point点类,Point类 ...

  4. opencv之Mat数据类型

    data:Mat对象中的一个指针,指向内存中存放矩阵数据的一块内存 (uchar* data) dims:Mat所代表的矩阵的维度,如 3 * 4 的矩阵为 2 维, 3 * 4 * 5 的为3维 c ...

  5. RobHess的SIFT代码解析之RANSAC

    平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码:SIFT+KD ...

  6. 【opencv学习笔记三】opencv3.4.0数据类型解释

    opencv提供了多种基本数据类型,我们这里分析集中常见的类型.opencv的数据类型定义可以在D:\Program Files\opencv340\opencv\build\include\open ...

  7. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  8. 深度图从ros数据类型转换成opencv数据类型

    摘要:ros下,利用realsense D435采集深度图,并将其转换成opencv的数据类型. 一. RGBD图像采集 通过image_transport包,根据给定的采集速度从realsense ...

  9. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...

随机推荐

  1. GoogLeNet解读

    转载:http://blog.csdn.net/shuzfan/article/details/50738394 GoogLeNet主要贡献提出了Inception结构: Architectural ...

  2. CallByValue和CallByName区别

    /** * Created by root * Description :CallByValue:进入函数就得先计算实参的值:CallByName:函数体重使用到的时候才计算 */ object Ca ...

  3. Ansible 管理任务计划

    ansible 使用 cron 模块来管理任务计划: [root@localhost ~]$ ansible 192.168.119.134 -m cron -a "name='test c ...

  4. U3D 使用VS编程组件

    http://visualstudiogallery.msdn.microsoft.com/6e536faa-ce73-494a-a746-6a14753015f1 http://visualstud ...

  5. codeforces水题100道 第十六题 Codeforces Round #164 (Div. 2) A. Games (brute force)

    题目链接:http://www.codeforces.com/problemset/problem/268/A题意:足球比赛中如果主场球队的主场球衣和客队的客队球衣颜色一样,那么要求主队穿上他们的可对 ...

  6. var_dump出现省略号的问题

    xdebug.var_display_max_children=128xdebug.var_display_max_data=512xdebug.var_display_max_depth=5

  7. [Win32]一个调试器的实现(五)调试符号

    一个调试器应该可以跟踪被调试程序执行到了什么地方,显示下一条将要执行的语句,显示各个变量的值,设置断点,进行单步执行等等,这些功能都需要一个基础设施的支持,那就是调试符号. 什么是调试符号 我们知道, ...

  8. Android textview及其子类

    属性: android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all) andr ...

  9. 【转载】.NET中锁6大处理方法 悲观乐观自己掌握

    我们为什么需要锁? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这就会产生冲突,这个就是著名的并发性问题. 图 1 并行性问题漫画 如何解决并发性问题? 借助正确的锁定策略可以解决并发性 ...

  10. SQL Server 索引结构及其使用(一)[转]

    SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(cluster ...