一基本数据结构
dateType:
unsigned char signed char
unsigned short signed short
double float
bool int
点的表示:
1>2D表示:
Point_<int>=Point2i=Point
Point_<float>=Point2f
Point_<double>=Point2d
Point po;
po.x //对应cols
po.y //对应rows
2>3D表示:
Point3_<int> =Point3i
Point3_<float>=Point3f
Point3_<double>=Point3d
尺寸的表示:
Size_<int>=Size2i
Size2i=Size
Size_<float>=Size2f
含有成元:width,height //宽度高度
矩形中,相应区域的表示:
1>Rect_类
正立矩阵
Rect_<int>=Rect
含有成元:x,y,width,height(左上角坐标,宽度,高度)
两个矩阵的交集和并集:
Rect rect=rect1 & rect2;//交集
Rect rect=rect1 | rect2;//并集
Rect rect=rect1 + point;//进行矩阵平移到point点
Rect rect=rect1 + size; //把矩阵进行缩放到size
2>RotatedRect类
可旋转矩阵
成员:
Point2f center; //中心点坐标
Size2f size; //尺寸大小
float angle; //角度大小
//当角度为0,90,180,270的时候,矩阵正立。
成员函数:
void RotatedRect::points(Point2f pts[]) const;
//在pts中存下 RotatedRect四个顶点坐标
Rect boundingRect() const;
//返回最小包围RotatedRect的正立矩阵Rect
小矩阵模板,Matx类;
template <typename _Tp,int m,int n >
class Matx;
//初始化时,type和size已知
Vec类
向量 Matx的子类:
template <typename _Tp,int n>
class Vec: public Matx<_Tp,n,1>
//exp:
typedef Vec<uchar, 2> Vec2b;
typedef Vec<float, 3> Vec3f;
//等等
常用于多颜色通道,坐标访问时使用的表示:
Mat image;
image.at<Vec3b>(i,j)[0];
颜色的表示:
Scalar_类,Vec的4元素特例派生类。
typedef Scalar_<double> Scalar;
//常用于函数的实参传递,
//或者将矩阵Mat对象初始化成一个颜色。
一维范围的表示:
Range类
成员
int start,end;//用来表示矩阵的边界范围。
智能指针:
Ptr类
有引用次数,会自动销毁。
Ptr<Mat> mat_ptr;
二基础图像容器Mat
Mat类,由两个数据部分组成:
1> 矩阵头,包含矩阵尺寸,存储方法,存储地址。
2>一个指向存储所有像素值的矩阵的指针。
Mat imageA,imageB;
//拷贝构造函数,只复制信息头和矩阵指针,矩阵不复制
Mat imageC(imageA);
//同样
imageB=imageA;
//对imageA的矩阵操作,同样会对imageB,imageC产生影响
复制矩阵本身采用:
Mat imageB=imageA.clone();
Mat imageC;
imageA.copyTo(imageC);
Mat的像素存储方式:
1>单通道灰度图
2>BGR(A) 蓝色,绿色,红色,(透明颜色)
3> HSV和HLS 色调,饱和度和亮度/透明度
4>YCrCb 存在于JPEG图像中
5>CIE L*a*b 在感知上均匀的颜色,适合用来度量两个颜色之间的距离
对应的type,depth,channels:
CV_[位数][是否带符号][类型前缀]C[通道数]
CV_8UC3 //表示3通道8位,unsigned char型
CV_32FC1 //表示单通道32位,float型
CV_8UC3 //表示3通道8位,unsigned char型
CV_32FC1 //表示单通道32位,float型
创建Mat的方法:
1>直接使用Mat的构造函数
Mat::Mat(int rows, int cols,