opencv学习笔记系列(一)

OpenCV学习笔记之一(OpenCV的基本数据类型)

资料来源《OReilly Learning OpenCV》

 

OpenCV有一些基本的数据类型(data type),它们都是简单的结构体(struct)。头文件cxtypes.h包含了这些结构的详细定义。

CvPoint,这些结构中最简单的一个,包含两个整型变量x和y。CvPoint还有两个兄弟:CvPoint2D32f 和 CvPoint3D32f。前者包含两个相同的变量x和y,它们都是浮点型的;后者包含第三个浮点型变量z。

CvSize,和CvPoint非常类似,含有两个整型变量width 和 height。如果需要浮点型的数据,使用CvSize的近亲CvSize2D32f。

CvRect,CvPoint 和 CvSize的另一个后代,它含有4个变量:x、y、width、height。

CvScalar,包含一组4个双精度浮点型数。当内存空间不成问题时,CvScalar通常有来表示1、2或3个浮点型数(这种情况下其它不需要的部分被简单的忽略)。CvScalar只有一个变量val,它是一个包含4个双精度浮点型数的指针。

所有这些数据类型都有一个类似cvSize()的构造方法,通常这些构造方法和类型名相同,但是它的第一个字母不是大写的。

我们这里说“通常”是因为总有一些行为古怪的家伙:特殊的,对于CvScalar有三个构造方法cvScalar(…)、cvScalarAll(double)和cvRealScalar(double)。cvScalar(…)接受1、2、3或4个参数,并把它们赋值给相应的元素,cvScalarAll(double)接受一个参数,把所有val[]中4个数都赋相同的值,cvRealScalar(double)把val[0]赋值,其它三个统一赋零值。

记住这里是C而不是C++,这些“构造方法”只是内联函数,这个内联函数获得一个参数表,把数据结构中的变量赋值,并返回这个结构。

这些内联构造方法是非常有用(extremely useful)的,因为它可以使你的代码不但易写而且易读。如果你想在图像中(5, 10)点和(20, 30)点之间画一个白色的矩形,你只需简单的调用:

cvRectangle(myImg, cvPoint(5, 10), cvPoint(20, 30), cvScalar(255, 255, 255));

 

你可能感兴趣的:(数据结构,c,struct)