OpenCV基础类型

一、(像素)点(x,y)类型

1.1 C语言 CvPoint结构体

CvPoint 类型是一个包含两个int类型的结构体;通常表示某像素点的坐标位置(x,y)

两个变体类型:

CvPoint2D32f表示该点坐标(x,y)的数据类型时浮点型;

CvPoint3D32f表示该点坐标(x,y,z)的数据类型时浮点型;

1.2 C++语言  Point类

通过模板结构实现,重载了向量vector类代数操作和组合操作

针对二维和三维存在两种模板结构体Point,数据类型可以为int 或者 float等等

点类型最大的好处是简单开销小,我们很少对点类型数据进行数据操作,而是用于转换为更多其他的结构类型,例如向量类或者矩阵类;

点类型声明:Point+维度+类型

1 b- unsigned char
2 s- short int
3 i- 32-bit int
4 f- 32-bit float
5 d- 64-bit float
类型表示

Point类的操作:

 1 默认构造    Point2i p1;Point3f p2;
 2 拷贝构造    Point3f p2(p1);
 3 数值初始化  Point2i p1(x0,x1);Point3f p2(x0,x1,x2);
 4 转换到Vector类型  (Vec3f) p;
 5 成员访问   p.x; p.y;
 6 点积运算   float x = p1.dot(p2);
 7 双精度点积 double x = p1.ddot(p2);
 8 向量积(仅适用三维)     p1.cross(p2);
 9 查询是否在某区域(rectangle)内(仅适用二维)     p.inside(r);
10 注意: C++Point类转换成C语言结构CvPoint需要注意浮点型数据直接转换为CvPoint会自动四舍五入(CvPoint默认类型为int); 

二、(图像)大小类型CvSize

2.1 C语言 CvSize结构体

CvSize 类型是一个包含两个int类型的结构体;通常表示某图像/区域的宽高大小(width, height)

数据类型使用浮点型,同样显示指定CVSize2D32f

2.2 C++语言  Size类

相比Point类,

1.数据成员不同,Size类成员为width 和 height

2.不能转换成固定大小的Vector类,但Vector类和Point类可以转换成Size类

Size类存在三种别名 Size == Size2i、Size2f

Size类操作

1 默认构造   Size sz;Size2i sz; Size2f p2;
2 拷贝构造   Size sz2(sz1);
3 数值初始化   Size sz(w,h);
4 成员访问   sz.width; sz.height;
5 计算区域面积   sz.area();

三、区域矩形大小类型CvRect

3.1 C语言 CvRect结构体

CvRect派生于CvPoint和CvSize,包含四个int成员:x,y,width,height;

3.2 C++语言 Rect结构体

矩形类成员包含Point类成员的x,y表示矩形的左上角,Size类成员width和height表示矩形的大小,Rect类并不继承自Point或Size;

Rect类操作

 1 默认构造   Rect r;
 2 拷贝构造   Rect r2(r1);
 3 数值初始化   Rect r(x, y, w , h);
 4 点坐标及大小初始化构造 Rect r(p,sz);
 5 两点初始化构造 Rect r(p1, p2);
 6 成员访问   r.x; r.y; r.width; r.height;
 7 计算区域面积 r.area();
 8 提取左上角点 r.tl();
 9 提取右下角点 r.br();
10 判断点是否在某区域内  r.contains(p);
11 
12 重载操作符对象间的运算:
13 矩形1与矩形2的交集              Rect r3 = r1 & r2;
14 包含矩形1与矩形2的最小矩形   Rect r3 = r1 | r2;
15 平移左上角坐标矩形大小不变    Rect r2 = r1 + p;
16 放大或缩小矩形大小,左上角点不变 Rect r2 = r1 + sz;
17 判断两个矩形是否相等  bool eq = ( r1 == r2);bool ne = ( r1 != r2);

操作计算演示:

 1 #include <opencv2/core.hpp>
 2 #include <iostream>
 3  
 4 using namespace std;
 5 using namespace cv;
 6  
 7 int main()
 8 {
 9     Rect r1(5, 5, 15, 10);
10     Rect r2(5, 5, 10, 5);
11     Rect r3 = r1 | r2;
12     Point p(2,3);
13     Rect r4 = r1 + p;
14     cout << "r3.width = " << r3.width << endl    //15
15          << "r3.height= " << r3.height << endl   //10
16          << "r3.area  = " << r3.area() << endl;  //150
17     cout << r3 << endl;                          //[ 15 x 10 from (5, 5)]
18     cout << r4 << endl;
19     return 0;
20 }

四、图像像素RGBA值CvScalar

4.1 C语言 CvScalar结构体

内部存储了四个double型的值,分别为val[0],val[1],val[2],val[3],我们通常用的是前三个,val[0],val[1],val[2]的含义分别是彩色照片的三个通道BGR。R是红色分量,G是绿色分量,B是蓝色分量,a是alpha;

图像存储的矩阵大小依赖于色彩空间的选用,更准确的说取决于所使用的通道数,在灰度图像中在内存描述如下:

对于多通道图像,列包含与通道数量一样多的子列。例如,在BGR颜色系统的情况下:

来自:https://docs.opencv.org/master/db/da5/tutorial_how_to_scan_images.html

4.2 C++语言  Scalar类

Scalar类直接继承固定大小的向量Vector类,直接支持向量类的代数操作,成员访问及其它操作特性;

Scalar类的操作:

1 默认构造      Scalar s;
2 拷贝构造      Scalar s2(s1);
3 数值初始化    Scalar s(x0); Scalar s(x0,x1,x2,s3);
4 数组元素相乘  s1.mul(s2);
5 共轭             s1.conj();

五、补充部分

5.1 旋转矩形类 RotatedRect类

在OpenCV C++借口中少数不使用类模板实现的类型之一

相比Rect类,该类将Point2f称为中心点,Size2f称为大小,另外一个附加的float称为角度(表现为围绕中心点顺时针方向旋转的角度)

RotatedRect类操作

1 默认构造     RotatedRect rr();
2 拷贝构造     RotatedRect rr2(rr1);
3 数值初始化   RotatedRect rr(p,sz,theta);
4 两点初始化   RotatedRect rr(p1,p2);
5 成员访问     rr.center; rr.size; rr.angle;
6 返回4角点坐标 rr.points(pts[4]);

5.2固定大小矩阵类 fixed matx类

fixed matx类是针对在编译期间已知其维度的且通常处理矩阵代数运算,在栈上分配空间

与其他类型的关系:

matx是其他基础类型的核心;

例如:fixed vector继承自fixed matrix;其它类(如Scalar类)继承自fixed vector,或者针对许多重要操作,它们都依赖于转换成fixed vector;

如果对象确实是一个大型阵列,比如图像或一组大型点阵列应该使用Mat类;

Matx类操作

 1 默认构造  Matx33f m33f; Matx43d m43d;
 2 拷贝构造  Matx22d m22d(n22d);
 3 数值初始化 Matx21f m(x0,x1); Matx44d m(x0,x1,x2,x3...x15);
 4 全指定元素 m33f = Matx33f::all(x);
 5 零矩阵     m23d = Matx23d::zeros();
 6 一矩阵     m16f = Matx16f::ones();
 7 单位矩阵   m33f = Matx33f::eye();
 8 均匀分布矩阵 m33f = Matx33f::randu(min, max);
 9 正态分布矩阵 m33f = Matx33f::nrandu(mean, variance);
10 成员访问  m(i,j), m(i)一个参数仅限于一维矩阵
11 矩阵代数运算 m1 = m0; m0*m1; m0 + m1; m0-m1;
12 数乘运算  m*a;a*m;m/a;

5.3固定大小向量类 fixed vector类

继承自fixed matrix类,可以看做matx类列数为一的别名;

该类的设计,便利性在于单顺序范文成员,并定义一些通常mat

声明:Vec{2,3,4,6}{b,s,w,i,f,d}

W- unsigned short

fixed Vector类操作

1 默认构造   Vec2s v2s;
2 拷贝构造   Vec3f u3f(v3f);
3 数值初始化 Vec2f v2f(x0,x1);
4 成员访问   v4f(i), v3w[i] 两种操作符都可以
5 向量积    v3f.cross(u3f);
Written at : 2018.06.23
原文地址:https://www.cnblogs.com/Shuqing-cxw/p/9217375.html