Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / OpenCV基础结构

OpenCV提供了多种基本数据类型。虽然这些数据类型在C语言中不是基本类型,但结构都很简单,可将它们作为原子类型。可以在"…/OpenCV/cxcore/include"目录下的cxtypes.h文件中查看其详细定义。在这些数据类型中最简单的就是CvPoint。CvPoint是一个包含integer类型成员x和y的简单结构体。CvPoint有两个变体类型:CvPoint2D32f和CvPoint3D32f。前者同样有两个成员x,y,但它们是浮点类型;而后者却多了一个浮点类型的成员z。CvSize类型与CvPoint非常相似,但它的数据成员是integer类型的width和height。如果希望使用浮点类型,则选用CvSize的变体类型CvSize2D32f。CvRect类型派生于CvPoint和CvSize,它包含4个数据成员:x,y,width和height。(正如你所想的那样,该类型是一个复合类型)。下一个(但不是最后一个)是包含4个整型成员的CvScalar类型,当内存不是问题时,CvScalar经常用来代替1,2或者3个实数成员(在这个情况下,不需要的分量被忽略)。CvScalar有一个单独的成员val,它是一个指向4个双精度浮点数数组的指针。所有这些数据类型具有以其名称来定义的构造函数,例如cvSize()。(构造函数通常具有与结构类型一样的名称,只是首字母不大写)。记住,这是C而不是C++,所以这些构造函数只是内联函数,它们首先提取参数列表,然后返回被赋予相关值的结构。各数据类型的内联构造函数被列在表3-1中:cvPointXXX(),cvSize(),cvRect()和cvScalar()。这些结构都十分有用,因为它们不仅使代码更容易编写,而且也更易于阅读。假设要在(5,10)和(20,30)之间画一个白色矩形,只需简单调用:cvRectangle(myImg, cvPoint(5,10),cvPoint(20,30),cvScalar(255,255,255));表1:points,size, rectangles和calar三元组的结构
结构成员意义
CvPointintx, y图像中的点
CvPoint2Dfloatx, y二维空间中的点
CvPoint3Dfloatx, y, z三维空间中的点
CvSizeintwidth,height图像的尺寸
CvRectintx, y,width,height图像的部分区域
CvScalardoubleval[4]RGBA值
cvScalar是一个特殊的例子:它有3个构造函数。第一个是cvScalar(),它需要一个、两个、三个或者四个参数并将这些参数传递给数组val[]中的相应元素。第二个构造函数是cvRealScalar(),它需要一个参数,它被传递给给val[0],而val[]数组别的值被赋为0。最后一个有所变化的是cvScalarAll(),它需要一个参数并且val[]中的4个元素都会设置为这个参数。CvPoint二维坐标系下的点,类型为整型typedef struct CvPoint
 {
  int x; /* X坐标, 通常以0为基点 */
  int y; /* y坐标, 通常以0为基点 */
 }
CvPoint;
/* 构造函数 */
inline CvPoint cvPoint( int x, int y );
/* 从 CvPoint2D32f类型转换得来 */
inline CvPoint cvPointFrom32f( CvPoint2D32f point )CvPoint2D32f二维坐标下的点,类型为浮点typedef struct CvPoint2D32f
 {
  float x; /* X坐标, 通常以0为基点*/
  float y; /* Y坐标, 通常以0为基点*/
 }
CvPoint2D32f;
/* 构造函数 */
inline CvPoint2D32f cvPoint2D32f( double x, double y );
/* 从CvPoint转换来 */
inline CvPoint2D32f cvPointTo32f( CvPoint point );CvSize矩形框大小,以像素为精度typedef struct CvSize
 {
  int width;  /* 矩形宽 */
  int height; /* 矩形高 */
 }
 CvSize;
/* 构造函数 */
inline CvSize cvSize( int width, int height );注意:构造函数的cv是小写!CvSize2D32f以亚像素精度标量矩形框大小typedef struct CvSize2D32f
 {
 float width;  /* 矩形宽 */
 float height; /* 矩形高 */
 }
 CvSize2D32f;
/* 构造函数*/
inline CvSize2D32f cvSize2D32f( double width, double height );
{
    CvSize2D32f s;
    s.width = (float)width;
    s.height = (float)height;
    return s;
}CvRect矩形框的偏移和大小typedef struct CvRect
 {
  int x; /* 方形的最左角的x-坐标  */
  int y; /* 方形的最上或者最下角的y-坐标 */
  int width; /* 宽 */
  int height; /* 高 */
 }
 CvRect;
/* 构造函数*/
inline CvRect cvRect( int x, int y, int width, int height );
{
      CvRect os;
     
      os.x = x;
      os.y = y;
      os.width = width;
      os.height = heigth;
     
      reture os;
}CvScalar可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器typedef struct CvScalar
 {
  double val[4]
 }
 CvScalar;
/* 构造函数:用val0初始化val[0]用val1初始化val[1], 以此类推*/
inline CvScalar cvScalar( double val0, double val1,
                         double val2, double val3);{  CvScalar  arr;
    arr.val[4] = {val0,val1,val2,val3}; 
    reture arr;
}//最通用的,可初始化0-4个通道举例:a)存放单通道图像中像素:cvScalar(255);b)存放三通道图像中像素:cvScalar(255,255,255);/* 构造函数:用val0123初始化所有val[0]...val[3] */
inline CvScalar cvScalarAll( double val0123 );
 
  { CvScalar arr;
 
   arr.val[4] = {val0123,val0123,val0123,val0123,};   reture arr;}
/* 构造函数:用val0初始化val[0],用0初始化val[1],val[2],val[3] */
inline CvScalar cvRealScalar( double val0 );{
      CvScalar arr;
     arr.val[4] = {val0}; 
     reture arr;
}CV_RGBCV_RGB是OPENCV中的一个宏,用于创建一个色彩值:#defineCV_RGB(r,g,b)  cvScalar((b),(g),(r),0)。看到转换为cvScalar时,rgb的顺序变为bgr,这是因为opencv中存储RGB模式彩图时,采用的通道顺序是BGR.举例:CvScalarcolor = CV_RGB( rand()&255,   rand()&255,rand()&255 )