OpenCV提供了多种基本数据类型,在这些数据类型中最简单的就是CvPoint。
CvPoint是一个包含integer类型成员x和y的简单结构体。
CvPoint有两个变体类型:CvPoint2D32f和CvPoint3D32f。前者同样有两个成员x,y,但它们是浮点类型;而后者却多了一个浮点类型的成员z。
CvSize类型与CvPoint非常相似,但它的数据成员是integer类型的width和height。如果希望使用浮点类型,则选用CvSize的变体类型CvSize2D32f。
CvRect类型派生于CvPoint和CvSize,它包含4个数据成员:x,y,width和height。(该类型是一个复合类型)。
还有一个重要的类型是包含4个整型成员的CvScalar类型,当内存不是问题时,CvScalar经常用来代替1,2或者3个实数成员(在这个情况下,不需要的分量被忽略)。CvScalar有一个单独的成员val,它是一个指向4个双精度浮点数数组的指针。
所有这些数据类型具有以其名称来定义的构造函数,例如cvSize()。(构造函数通常具有与结构类型一样的名称,只是首字母不大写)。记住,这是C而不是C++,所以这些构造函数只是内联函数,它们首先提取参数列表,然后返回被赋予相关值的结构。
各数据类型的内联构造函数被列在下表中:cvPoint(),cvSize(),cvRect()和cvScalar()。这些结构都十分有用,因为它们不仅使代码更容易编写,而且也更易于阅读。假设要在(5,10)和(20,30)之间画一个白色矩形,只需简单调用:
cvRectangle{
myImg;
cvPoint(5,10);
cvPoint(20,30);
cvScalar(255,255,255);
}
表3-1:points, size, rectangles和calar三元组的结构
结构 |
成员 |
意义 |
CvPoint |
int x, y |
图像中的点 |
CvPoint2D32f |
float x, y |
二维空间中的点 |
CvPoint3D32f |
float x, y, z |
三维空间中的点 |
CvSize |
int width, height |
图像的尺寸 |
CvRect |
int x, y, width, height |
图像的部分区域 |
CvScalar |
double val[4] |
RGBA 值 |
cvScalar是一个特殊的例子:它有3个构造函数。第一个是cvScalar(),它需要一个、两个、三个或者四个参数并将这些参数传递给数组val[]中的相应元素。第二个构造函数是cvRealScalar(),它需要一个参数,它被传递给给val[0],而val[]数组别的值被赋为0。最后一个有所变化的是cvScalarAll(),它需要一个参数并且val[]中的4个元素都会设置为这个参数。
个人认为好的结合代码详解数据类型的参考:
https://blog.csdn.net/maweifei/article/details/51227253
https://www.cnblogs.com/guoqiaojin/p/3176692.html
https://www.cnblogs.com/Anita9002/p/3904367.html
https://blog.csdn.net/gdut2015go/article/details/46301821
革命尚未成功,同志仍需努力。