2017-3-4
Mat数据类型
1 Mat类由两个数据部分组成,矩阵头(矩阵尺寸,存储方法,存储地址)和指向所有像素值的矩阵的指针
2 为了减小矩阵大的开销,采用计数机制,每个Mat对象有一个信息头但共享一个矩阵,使得拷贝构造函数只复制信息头和矩阵指针,而不复制矩阵。
Mat A,C;
A=imread();
Mat B(A); //使用拷贝构造函数
C=A;
以上ABC最终都指向同一个数据矩阵
3 创建一个感兴趣区域,只需要创建包含边界信息的信息头
Mat D(A,Rect(10,10,100,100)); //使用矩形界定
Mat E=A(Range():all(),Range(1,3); //使用行和列界定
4 使用克隆函数复制矩阵本身
Mat F=A.clone();
Mat G;
A.copyTo(G);
像素值的存储方法:
1 Mat不仅仅是一个图像容器类,也是一个通用的矩阵类,创建Mat对象有多种方法:
2 使用Mat构造函数
Mat M(2,2,CV_8UC3,Scalar(0,0,225));
3 C++中通过构造函数初始化
int sz[3]={2,2,2};
Mat L(3,sz,CV_8UC,Scalar::all(0));
4 为已存在的lplImage指针创建信息头
lplImage *img=cvLoadImage();
Mat mtx(img);
5 利用Create()函数
M.create(4,4,CV_8UC(2));
OpenCV的常用数据类型和函数
1 点的表示Point类: Point point;
point.x=10;
point.y=8;
或者Point point=Point(10,8);
另外在OPenCV中:
typedef Point_<int> Point2i;
typedef Point2i Point;
typedef Point_<float> Point2f;
即Point,Point_<int>,Point2i等价;Point2f,Point_<float>
2 颜色的表示 Scalar类
Scalar(a,b,c);
3尺寸的表示size
4矩形类的表示
常用成员函数 Size(),Area()返回矩形的面积,contains(Point)判断点是否在矩形内,tl返回左上角点的坐标,br()返回右下角点坐标
求交: Rect rect=rect1&rect2;
求补: |
平移: Rect reectShift=rect+point;
缩放: Rect rectScale=rect+size;
5颜色空间转换cvtColor()函数 //可以实现RGB向HSV,HSI
6基本图形的绘制
绘制直线的line函数
绘制椭圆的ellipse函数
绘制矩形的rectangle函数
绘制圆的circle函数
填充的多变形fillPoly函数
2017-3-13
图像增强–增强图像中的有用信息,目的是要改善图像的视觉效果,针对图像的应用场合,有目的的调整图像的整体性或局部特性,是原来不清晰的图像变得清晰或者强调某些感兴趣的特征,可分为频率域法和空间域法,
1.频率域法将图像看成是二维型号,对其进行基于二维傅里叶 变换的型号增强,采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。后者空间域法中具有代表性的算法有局部求平均值法和中值滤波(取局部邻域中的中间像素值)法等,它们可用于去除或减弱噪声。