1. 内部函数都是icv 开头的,不用。只是由外部函数调用。
2. 外部函数都是cv 开头的。
3. 混合的C/C++ 接口的头文件 .h 结尾。而纯C++ 是用.hpp 结尾的。
4. 函数接口设计:函数作用,返回类型,函数名,参数顺序,参数默认值。参数解释
a) 函数作用代码 要精简短小,以便调用。
b) 命名 以cvActionObject 像一句话
c) 函数返回值 通常 创建一个对象,并返回一个对象。
d) 函数的参数类型 应该用openCV中自带的类型。而不要用简单的 指针和数值,以防opencv 中的库函数 调用不方便。
e) 参数顺序:输入参数,输出参数,可选参数。输入参数通常用const 约束
5. 函数实现:
a) 关注要素: 类型检查,错误产生和处理,内存管理和资源回收,调用低级函数
b) 参数类型: openCV中普遍用高级类型 返回和传送 参数。不用简单指针和数值,为了方便其他函数的调用。
c) 错误产生时用 cvError 函数抛出错误。CV_ERROR 等代替。
d) 内存管理和资源回收: cvAlloc and cvFree 分配回收 简单缓存 有效。但是复杂资源和大内存 用cvCreate and cvRelease <object> 来分配和回收。
e) 调用低级函数 方便又安全的 方法是 使用IPPI_CALL 宏。
6. 移植性:用sizeof(int) 而不用 4 。用预处理指令包含非可移植代码。
7. 图像分: 二值图像(黑白两值图像),灰度图像(一维变化),彩色图像(三维变化)
8. 用CV_ERROR/OPENCV_ERROR 抛出错误
9. 用CV_CALL /OPENCV_CALL 调用高级函数
10. 用IPPI_CALL 调用低级函数
11. 用typedef 有利于移植,跨平台。Typedef int INTEGER;
12. CvMat 的结构: type ,step ,count ,*data,height,width
13. CvTermCriteria 迭代算法的种植准则
14. CvArr* 不确定数组
15. CvMat 结构头和数据分开存储的,可以分开创建。三种方法:(三个概念: 内存空间,头, 数据)
a) cvCreateMatHeader(); cvCreateData()= cvSetData() 先分配头,再分配数据
b) cvCreateMat(cols,rows, type) 把头和数据的空间都分配了
c) cvMat(cols,rows,type,*data) 分配头 并把已有的数据空间 用*data相连
d) CvMat *ptr = cvCreateMat(cols,rows,type); 分配好了头和数据的空间但没有初始化,只是用默认值。 cvInitMatHeader(ptr,cols,rows,type, *data)