OpenCV命名规则

来源:互联网 发布:linux中文显示问号 编辑:程序博客网 时间:2024/05/01 13:36

OpenCV使用近似匈牙利命名法的方法,比较值得一提的特色是:它的数据结构几乎都是大写的Cv开头,而它提供的函数都是小写的cv,举个例子:
CvSize ImageSize = cvSize(400,300); //cvSize(width,height)
ImageSize的类型是CvSize,通过cvSize()函数來初始化结构体:400代表的是宽、300代表的是高;CvSize结构体包含width及height两个整型,可以用ImageSize.width,ImageSize.height來直接读取和设置,唯一差別是,cvSize()顺便用malloc()分配了结构体的内存空间。
函数命名规则基本上遵从:cvActionTargetMethod();提高了函数的可读性,指明用什么动作,哪个目标,用什么方法。常遇到的状况有四种:
1.cvActionTarget()
2.cvTarget()
3.cvMethod()
4.cvActionMethod()
1.的话例如cvCreateImage(),cvNamedWindow()等;2.的话非常常见,如cvMat(),cvSize(),cvPoint();3.的话比较常用的是算法或某方法,如cvDCT()离散余弦变换算法;4.的话如cvFindContours()轮廓搜寻算法;此外也有例外,如:DoubleClickedMouse()(这个例子不在OpenCV命名之內)。这种命名法对于常写程序的人而言是相当重要的技巧,初始化数据结构就直接用名字,函数调用就用动词+名词,当再构建一个程序或系统的时候可以很容易的用数据流图(DFD)表示。这个是良好的命名习惯。
常量命名规则,OpenCV里提供了大量预定义的常量,也就是大写英文加下划线的那种,如:
CV_8UC1
IPL_DEPTH_8U
CV_BLUR_NO_SCALE
这种常量由#define在头文件中定义,如:
#define CV_BLUR_NO_SCALE 0
一般的常量都很容易从字面上的意义去了解,比较特殊的是矩阵和图形的创建参数,cvCreateMat(),cvCreateImage()。
cvCreateMat()参数的命名规则是用大写CV_(位数)+(数据类型)+(Channel数),全部的矩阵参数如下所示:

CV_8UC1   CV_8SC1   CV_16UC1   CV_16SC1   CV_32SC1   CV_32FC1   CV_64FC1
    CV_8UC2   CV_8SC2   CV_16UC2   CV_16SC2   CV_32SC2   CV_32FC2   CV_64FC2
    CV_8UC3   CV_8SC3   CV_16UC3   CV_16SC3   CV_32SC3   CV_32FC3   CV_64FC3
    CV_8UC4   CV_8SC4   CV_16UC4   CV_16SC4   CV_32SC4   CV_32FC4   CV_64FC4

里面的位数,分别代表8bits、16bits、32bits、64bits;数据类型,U代表Unsigned Integer,无符号整数类型;S代表Signed Integer,有符号整数类型,F代表Float,浮点数类型;Channel数,C1代表单通道,C2代表两个通道,C3代表三个通道,以此类推… 这里的通道表示的是色彩空间的维度,例如BMP格式的RGB空间,它的Channel就是3,简单来说就是C1代表一个二维矩阵,C2代表两个二维矩阵,C3代表三个二维矩阵,以此类推…
cvCreateImage()参数固定用IPL_DEPTH_开头,命名规则为IPL_DEPTH_(位数)+(数据类型),全部的参数如下所示:

IPL_DEPTH_1U    IPL_DEPTH_32F    IPL_DEPTH_8S
    IPL_DEPTH_8U                     IPL_DEPTH_16S
    IPL_DEPTH_16U                    IPL_DEPTH_32S

所有的说明皆同上述的矩阵参数命名规则,位数分別有1bit(黑白二值图),8bits,16bits,32bits;数据类型分別为U(Unsigned Integer),S(Signed Integer),F(Float)。