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 );
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 );
/ 构造函数 /
inline CvPoint2D32f cvPoint2D32f( double x, double y );
/ 从 CvPoint 转换来 */
inline CvPoint2D32f cvPointTo32f( CvPoint point );
CvPoint3D32f
三维浮点坐标上的点
typedef struct CvPoint3D32f
{
float x; /* x-坐标,通常基于 0 /
float y; / y-坐标, 通常基于 0*/
float z; /* z-坐标,通常基于 0 /
}
CvPoint3D32f;
/ 构造函数 */
inline CvPoint3D32f cvPoint3D32f( double x, double y, double z );
CvPoint2D64f
2D point with double precision floating-point coordinates
typedef struct CvPoint2D64f
{
double x; /* x-坐标,通常基于 0 /
double y; / y-坐标,通常基于 0 /
}
CvPoint2D64f;
/ 构造函数 /
inline CvPoint2D64f cvPoint2D64f( double x, double y );
/ 从 CvPoint 转换得来 /
inline CvPoint2D64f cvPointTo64f( CvPoint point );
CvPoint3D64f
3D point with double precision floating-point coordinates
typedef struct CvPoint3D64f
{
double x; / x-坐标,通常基于 0 /
double y; / y-坐标,通常基于 0 /
double z; / z-坐标,通常基于 0 /
}
CvPoint3D64f;
/ 构造函数 /
inline CvPoint3D64f cvPoint3D64f( double x, double y, double z );
}
CvPoint3D64f;
/ 构造函数 /
inline CvPoint3D64f cvPoint3D64f( double x, double y, double z );
CvSize
矩形框大小,以像素为精度
typedef struct CvSize
{
int width; / 矩形宽 /
int height; / 矩形高 /
}
CvSize;
/ 构造函数 /
inline CvSize cvSize( int width, int height );
CvSize2D32f
以低像素精度标量矩形框大小
typedef struct CvSize2D32f
{
float width; / 矩形宽 /
float height; / 矩形高 /
}
CvSize2D32f;
/ 构造函数*/
inline CvSize2D32f cvSize2D32f( double width, double height );
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 );
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=0,
double val2=0, double val3=0 );
/* 构造函数:用 val0123 初始化 val0123 /
inline CvScalar cvScalarAll( double val0123 );
/ 构造函数:用 val0 初始化 val[0],val[1]…val[3]用 0 初始化 /
inline CvScalar cvRealScalar( double val0 );
CvTermCriteria
迭代算法的终止标准
#define CV_TERMCRIT_ITER 1
#define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER
#define CV_TERMCRIT_EPS 2
typedef struct CvTermCriteria
{
int type; / CV_TERMCRIT_ITER 和 CV_TERMCRIT_EPS 的联合 /
int max_iter; / 迭代的最大数 /
double epsilon; / 结果的精确性 /
}
CvTermCriteria;
/ 构造函数 /
inline CvTermCriteria cvTermCriteria( int type, int max_iter, double
epsilon );
/ 检查终止标准并且转换使 type=CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,并且满足
max_iter 和 epsilon 限制条件 /
CvTermCriteria cvCheckTermCriteria( CvTermCriteria criteria,
double default_eps,
int default_max_iters );
CvMat
多通道矩阵
typedef struct CvMat
{
int type; / CvMat 标识 (CV_MAT_MAGIC_VAL), 元素类型和标记 /
int step; / 以字节为单位的行数据长度*/
int* refcount; /* 数据参考计数 /
union
{
uchar ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data 指针 /
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows; / 行数 /
int cols; / 列数*/
#endif
} CvMat;
CvMatND
多维、多通道密集数组
typedef struct CvMatND
{
int type; /* CvMatND 标识(CV_MATND_MAGIC_VAL), 元素类型和标号*/
int dims; /* 数组维数 /
int refcount; /* 数据参考计数 /
union
{
uchar ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data 指针*/
/* 每维的数据结构 (元素号,以字节为单位的元素之间的距离)是配套定义的
/
struct
{
int size;
int step;
}
dim[CV_MAX_DIM];
} CvMatND;
CvSparseMat
多维、多通道稀疏数组
typedef struct CvSparseMat
{
int type; / CvSparseMat 标识 (CV_SPARSE_MAT_MAGIC_VAL), 元素类型和
标号 /
int dims; / 维数 /
int refcount; /* 参考数量 - 未用 /
struct CvSet heap; /* HASH 表节点池 /
void* hashtable; /* HASH 表:每个入口有一个节点列表,有相同的 “以 HASH
大小为模板的 HASH 值” /
int hashsize; / HASH 表大小 /
int total; / 稀疏数组的节点数 /
int valoffset; / 数组节点值在字节中的偏移 /
int idxoffset; / 数组节点索引在字节中的偏移 /
int size[CV_MAX_DIM]; /维大小 /
} CvSparseMat;
IplImage
IPL 图像头
typedef struct _IplImage
{
int nSize; / IplImage 大小 /
int ID; / 版本 (=0)/
int nChannels; / 大多数 OPENCV 函数支持 1,2,3 或 4 个通道 /
int alphaChannel; / 被 OpenCV 忽略 /
int depth; / 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S,
IPL_DEPTH_16U,
IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F
and IPL_DEPTH_64F 可支持 /
char colorModel[4]; / 被 OpenCV 忽略 /
char channelSeq[4]; / 同上 /
int dataOrder; / 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.
只有 cvCreateImage 可以创建交叉存取图像 /
int origin; / 0 - 顶—左结构,
1 - 底—左结构 (Windows bitmaps 风格) /
int align; / 图像行排列 (4 or 8). OpenCV 忽略它,使用
widthStep 代替 /
int width; / 图像宽像素数 /
int height; / 图像高像素数*/
struct _IplROI roi;/ 图像感兴趣区域. 当该值非空只对该区域进行处理
/
struct _IplImage maskROI; / 在 OpenCV 中必须置 NULL /
void imageId; / 同上/
struct _IplTileInfo tileInfo; /同上/
int imageSize; / 图像数据大小(在交叉存取格式下
imageSize=image->heightimage->widthStep),单位字节*/
char imageData; / 指向排列的图像数据 /
int widthStep; / 排列的图像行大小,以字节为单位 /
int BorderMode[4]; / 边际结束模式, 被 OpenCV 忽略 /
int BorderConst[4]; / 同上 /
char imageDataOrigin; / 指针指向一个不同的图像数据结构(不是必须排
列的),是为了纠正图像内存分配准备的 /
}
IplImage;
IplImage 结构来自于 Intel Image Processing Library(是其本身所具有的). OpenCV
只支持其中的一个子集:
• alpha 通道在 OpenCV 中被忽略.
• colorModel 和 channelSeq 被 OpenCV 忽略. OpenCV 颜色转换的 唯一个函数
cvCvtColor 把原图像的颜色空间的目标图像的颜色空间作为一个参数.
• 数据顺序 必须是 IPL_DATA_ORDER_PIXEL (颜色通道是交叉存取), 然面平面图像的被选
择通道可以被处理,就像 COI(感兴趣的通道)被设置过一样.
• 当 widthStep 被用于去接近图像行序列,排列是被 OpenCV 忽略的.
• 不支持 maskROI . 处理 MASK 的函数把他当作一个分离的参数. MASK 在 OpenCV 里是
8-bit, 然而在 IPL 他是 1-bit.
• 名字信息不支持.
• 边际模式和边际常量是不支持的. 每个 OpenCV 函数处理像素的邻近的像素,通常使
用单一的固定代码边际模式.
除了上述限制, OpenCV 处理 ROI 有不同的要求.要求原图像和目标图像的尺寸或 ROI 的尺寸必须
(根据不同的作操,例如 cvPyrDown 目标图像的宽(高)必须等于原图像的宽(高)除 2 ±1)精确
匹配,而 IPL 处理交叉区域,如图像的大小或 ROI 大小可能是完全独立的。
CvArr
不确定数组
typedef void CvArr;
CvArr 仅仅是被用于作函数的参数,用于指示函数接收的数组类型可以不止一个,如
IplImage, CvMat* 甚至 CvSeq*. 最终的数组类型是在运行时通过分析数组头的前 4
个字节判断。