opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar
1)CvPoint:表示一个坐标为整数的二维点,是一个包含integer类型成员x和y的简单结构体。
typedef struct CvPoint变体类型:
CvPoint2D32f //float x,y 二维空间中的点CvPoint3D64f //double类型
二维浮点型数据:
CV_INLINE CvPoint2D32f cvPoint2D32f( double x, double y )
类型转换:
将整形数据转换为浮点型数据:
将浮点型数据转换为整形数据:
CV_INLINE CvPoint cvPointFrom32f( CvPoint2D32f point )} //把32位浮点型数据转换为整型数据。这个很容易理解。
cvRound
原型是:int cvRound (double value)
作用是:对一个double型的数进行四舍五入,并返回一个整型数!
函数 cvRound, cvFloor, cvCeil 用一种舍入方法将输入浮点数转换成整数。 cvRound 返回和参数最接近的整数值。 cvFloor 返回不大于参数的最大整数值。
cvCeil 返回不小于参数的最小整数值。在某些体系结构中该函数 工作起来比标准 C 操作起来还要快。
2)CvSize:表示矩阵框大小,以像素为精度。
与CvPoint结构类似,但数据成员是integer类型的width和height。
typedef struct变体类型:CvSize2D32f 表示浮点型数据
3)CvRect:通过方形左上角坐标和方形的高和宽来确定一个矩形区域
typedef struct CvRect
{
int x; /* 方形的左上角的x-坐标 */int height; /* 高 */
}
//包含4个成员元素,其中x,y用来确定区域左上角的坐标,width和height确定区域大小。全都是整型数据。
}
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包含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个通道
2. inline CvScalar cvRealScalar( double val0 );
//只使用第一个通道,val=val0;等同于cvScalar(val0,0,0,0);看到转换为cvScalar时,rgb的顺序变为bgr,这是因为opencv中存储RGB模式彩图时,采用的通道顺序是BGR.
两个变体类型:cvRealScalar,cvScalarAll
CV_INLINE CvScalar cvRealScalar( double val0 )cvRealScalar函数变体的意义是:只使用1个val[0]的值,其他3个值全部默认为0。
}
cvScalarAll的意义是全部值都设置为val0123。
5)cvRectangle:通过对角线上的两个顶点绘制简单、指定粗细或者带填充的矩形
函数原型:
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2,
CvScalar color,int thickness=1, int line_type=8, int shift=0 );
参数介绍:thickness -- 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
line_type -- 线条的类型。见cvLine的描述
shift -- 坐标点的小数点位数。