OpenCV笔记(一)——数据结构与基本绘图

来源:互联网 发布:软件开发项目建议书 编辑:程序博客网 时间:2024/05/16 06:06

1 Mat结构的使用
1.1Mat是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸·存储方法·存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。
例:创建一个感兴趣区域(ROI)
Mat D(A,Rect(20,20,200,200));//使用矩阵界定
Mat E= A(Range:all(),Range(1,3));//用行和列来界定
1.2 复制矩阵本身,使用函数clone()或者copyTo()
例:
Mat F=A.clone();
Mat G;
A.copyTo(G);
1.3 显式创建Mat对象的七种方法
【方法一】使用Mat()构造函数
二维多通道图像:
CV_[The number of bits per item]{Signed or Undigned][Type Prefix]C[The channel number]
即:CV_【维数】【带符号与否】【类型前缀】C【通道数】
例:Mat M(2,2,CV_8UC3,Scalar(0,0,255));

【方法二】在C/c++中通过构造函数进行初始化
例:int sz[3]={2,2,2);
Mat L(3,sz,CV_8UC,Scalar::all(0));
【方法三】为已存在的IplImage指针创建信息头
例:IplImage*img=cvLoadImage("1.jpg",1);
Mat mtx(img);//转换IplImage*-> Mat
【方法四】利用Create()函数
例:M.create(4,4,CV_ 8UC(2));
注:此方法不能为矩阵设初值,只是在改变尺寸时重新为矩阵数据开辟内存而已
【方法五】采用Matlab式的初始化方式
例:Mst E=Mat::eye(4,4,CV_64F);
Mat 0=Mat::ones(2,2,CV_32F);
Mat 2=Mat::zeros(3,3,CV_8UC1);
【方法六】对小矩阵使用逗号分隔式初始化函数
例:Mat C=(Mat_<double>(3,3)<<0,-1,0,-1,0,-1,0);
【方法七】为已存在的对象创建新信息头
例:Mat RowClone=C.row(1).clone();
1.4 r矩阵定义:用randu()函数产生的随机值来填充矩阵。
例:r=Mat(10,3,CV_8UC3);
randu(r,Scalar::all(0),Scalalr::all(255));
1.4.1 定义和输出二维点
例:Point2f p(6,2);
1.4.2 定义和输出三维点
Point3f p3f(8,2,0);
1.4.3 定义和输出基于Mat的std::vector
例:vector<float>v;
v.push_back(3);
v.push_back(5);
v.push_back(7);
1.4.4 定义和输出std::vector点
例:vector<Point2f>point(20);
for(size_t i=0;i<points.size();++i)
points(i)=Point2f((float(i*5),(float)(i%7));
1.5 点的表示:Point类
例子(二维坐标系):Point point=Point(10,8);
1.6 颜色的表示:Scalar类
例:Scalar(a,b,c)
RGB颜色值:红色分量为c,绿色分量为b,蓝色分量为a
常用Scalar_<double>
1.6 尺寸的表示:Size类
Size_(_Tp_width,_Tp_height);
例:Size(5,5);//构造出的Size宽度和高度都为5,即XXX.width和XXX.height都为5
1.7 矩形的表示:Rect类
Rect类的成员变量有x,y,width,height,分别为左上角的坐标和矩形的宽和高。常用的成员函数有:
Size()返回值为Size;
area()返回矩形的面积;
contains(Point)判断点是否在矩形内;
inside(Rect)函数判断矩形是佛府在该矩形内;
tl()返回左上角点坐标;
br()返回右下角点坐标。
如果想求两个矩形的交集和并集,
例:Rect rect=rect1&rect2;
Rect rect=rect1|rect2;
如果想让矩形进行平移操作和缩放操作,
例:Rect rectShift=rect+point;
Rect rectScale=rect+size;
1.8 颜色空间转换:cvtColor()函数
原型:C++:void cvtColor(InputArray src,OutputArray dst,int code,int dstCn=0)
InputArray src:输入图像
OutputArray dst:输出图像
int code:颜色看空间转换的标识符
int dstCn=0:目标图像的通道数,若该参数是0,表示目标图像取源图像的通道数
例:cvtColor(srcImage,dstImage,COLOR_GRAY2BGR);
注:OpenCV默认的照片的图片通道存储顺序是BGR,即蓝绿红,而不是RGB
1.9 其他常用的知识点(Core模块)
#OpenCV中防止内存溢出的函数有alignPtr,alignSize,allocate,deallocate,fastMalloc,fastFree等
#<math.h>里的函数:计算向量角度的函数fastAtan2,计算立方根的函数cubeRoot
向上取整函数cvCeil,向下取整数函数cvFloor,四舍五入函数cvRound
#显示文字相关的函数有:getTextSize,cvInitFont,putText
#作图相关的函数:circle,clipLine,ellipse,ellipse2Poly,line,rectangle,polylines,类LineIterator
#填充相关的函数有fillConvexPoly, fillPoly
#OpenCV中RNG()函数的作用为初始化随机数状态的生成器
0 0
原创粉丝点击