OpenCV中常用的数据结构和函数
Point类:点的表示
Point类表示的是一个二维坐标下的点,其图像由其图像坐标X和Y指定的2D点。用法示例如下:
Point point1,point2;
point1.x=10;
point.y=12;
point2=Point(12,23);
另外,Point_,Point2i,Point互相等价,Point_,Point2f互相等价,因为查看OpenCV库中的core.hpp发现有如下定义:
Scalar类:颜色的表示
Scalar()是一个具有四个元素的数组,在OpenCV中被大量用于传递像素值,比如RGB颜色。但RGB颜色值为三个参数,对于Scalar函数来说,如果用不到第四个参数,则不需要写出来。对于下面这行代码:
Scalar(a, b, c);
那么定义RGB的颜色值,红色的分量为c,绿色的分量为b,蓝色的分量为a。
需要注意的一点是,Scalar的源头是Scalar_类,而Scalar_类是Vec4x的一个变种,我们常用的Scalar类其实就是Scalar_。这也就是为什么很多函数的参数输入可以是Mat,也可以是Scalar。
Size类:尺寸的表示
先看Size类的源码,如下:
其中Size_是个模版类,可以看出其实Size2i和Size是等价的,找到Size_模版类的定义如下:
可以看到Size_模版类中重载了几个构造函数,其中我们用到最多的是下面这个:
Size_(_Tp _width, _Tp_height);
另外,模版类中给出了高度 height和 宽度 wight两个熟悉,我们可以用XXX.height和XXX.wight来分别表示其高度和宽度。Size(5,5);//构造出的Size的宽度和高度都是5.
Rect类:矩形的表示
Rect类的成员变量有x、y、width、height,分别为左上角点的坐标和矩形的宽和高,Rect类的定义如下:
常用的成员函数有size()返回值为Size;area()返回的是矩形的面积;contains(Point)判断点是否在矩形内;t1()返回的是左上角点坐标;br()返回的是右下角的坐标。
Rect rect =rect1 & rect2; //求两个矩阵的交集
Rect rect=rect1 | rect2; //求两个矩阵的并集
Rect rectShift =rect + point; //让矩形进行平移操作
Rect rectScale = rect +size; //让矩形进行缩放操作
cvtColor()函数:颜色空间的转换
该函数可以实现RGB颜色向HSV、HSI等颜色空间的转换,也可以转化为灰度图像。函数原型如下:
void cvtColor(InputArray src,OutputArray dst, int code, int dstCn=0);
第一个参数为输入图像,第二个参数为输出图像,第三个参数为颜色空间转换的标识符,第四个参数为目标图像的通道数,若该参数为0,表示目标图像取原图像的通道数。