• 基础结构
• 数组操作
o 初始化
o 获取元素和数组子集
o 拷贝和填充
o 变换和置换
o 算术、逻辑和比较
o 统计
o 线性代数
o 数学函数
o 随机数生成
o 离散变换
• 动态结构
o 内存存储
o 序列
o 集合
o 图
o 树 -----------------
• 绘图函数 ****************************************
o 典线和形状
o 文本
o 点集和轮廓
• 数据保存和运行时类型信息 樊臻韬
o 文件存储
o 写数据
o 读数据
o 运行时类型信息和通用函数 ------------
---
• 其它混合函数
• 错误处理和系统函数
o 错误处理
o 系统函数 谭俊河
• 依字母顺序函数列表
• 例子列表 ------------------------
---
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 );
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 );
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 height; /* 高 */
}
CvRect;
/* 构造函数*/
inline CvRect cvRect( int x, int y, int width, int height );
int y; /* 方形的最上或者最下角的 y-坐标 */
int width; /* 宽 */
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->height*image->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 个字节判断。
数组操作
CreateImage
创建头并分配数据
IplImage* cvCreateImage( CvSize size, int depth, int channels );
size 图像宽、高.
depth
图像元素的位深度,可以是下面的其中之一:
IPL_DEPTH_8U - 无符号 8 位整型
IPL_DEPTH_8S - 有符号 8 位整型
IPL_DEPTH_16U - 无符号 16 位整型
IPL_DEPTH_16S - 有符号 16 位整型
IPL_DEPTH_32S - 有符号 32 位整型
IPL_DEPTH_32F - 单精度浮点数
IPL_DEPTH_64F - 双精度浮点数
channels
每个元素(像素)通道号.可以是 1, 2, 3 或 4.通道是交叉存取的,例如通常
的彩色图像数据排列是:
b0 g0 r0 b1 g1 r1 ...
虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些 OpenCV 也
能处理他, 但是这个函数只能创建交叉存取图像.
函数 cvCreateImage 创建头并分配数据,这个函数是下列的缩写型式
header = cvCreateImageHeader(size,depth,channels);
cvCreateData(header);
CreateImageHeader
分配,初始化,并且返回 IplImage 结构
IplImage* cvCreateImageHeader( CvSize size, int depth, int
channels );
size 图像宽、高. depth
像深 (见 CreateImage).
channels
通道数 (见 CreateImage).
函数 cvCreateImageHeader 分配, 初始化, 并且返回 IplImage结构.
这个函数相似于:
iplCreateImageHeader( channels, 0, depth,
channels == 1 ? "GRAY" : "RGB",
channels == 1 ? "GRAY" : channels == 3 ?
"BGR" :
channels == 4 ? "BGRA" : "",
IPL_DATA_ORDER_PIXEL,
IPL_ORIGIN_TL, 4,
size.width, size.height,
0,0,0,0);
然 而IPL
CV_TURN_ON_IPL_COMPATIBILITY 宏)
函 数 不 是 作 为 默 认 的
(
见
ReleaseImageHeader
释放头
void cvReleaseImageHeader( IplImage** image );