Mat 对象初试化
Mat A,C; // 创建信息头部分
A= imread(“1.jpg”,CV_LOAD_IMAGE_COLOR);
Mat B(A);//使用拷贝函数,拷贝A的信息头部分到B信息头部分
C=A;//将A的信息头部分赋值给C的信息头
//以上创建的信息头都指向同一个矩阵。
创建ROI
Mat D (A, Rect(10,10,100,100)); //使用矩阵定界ROI
Mat E =A(Rang:all(),Range(1,3)); //使用行和列定界ROI
总结:Mat类对象包括两个部分1、描述矩阵的信息头部分 2、指向矩阵的指针
赋值矩阵
Mat F=A.clone(); //将A的信息头部分和所指向的矩阵拷贝给F
Mat G;
A.copyTo(G); //将A的信息头部分和所指向的矩阵拷贝给G
颜色空间
最简单的颜色空间是灰度级空间,每种颜色空间都有一种及以上的基本元素。
常见的颜色空间:RGB
HSV 色调 饱和度 亮度。 HLS 色调 饱和度 明度。可以抛去最后一个元素,使算法对输入图像的光照条件不明感
CIE L*a*b 适合用来度量两个颜色之间的距离
创建Mat类对象
1、 //创建2*2矩阵,CV_8UC3表示深度8bit,无符号char型,3通道,初值0,0,225
Mat M(2,2, CV_8UC3,Scalar(0,0,225));
2、//创建3维矩阵,数组表示每个维度的尺寸
int sz[3] ={2,2,2};
Mat L(3,sz, CV_8UC,Scalar:: all(0));
3、//使用Creat函数创建4*4阶函数CV_8UC(2)表示2通道
Mat A;
A.create(4,4,CV_8UC(2));
Mat dstImage;
dstImage.create(A.rows,A.cols,A.type()); //创建和A相同的行列和类型的矩阵
//此创建方法不嫩为矩阵设初值,只能在该百年尺寸时重新为矩阵数据开辟内存
4、//使用MATLAB的方式
//单位矩阵,4*4阶,1通道
Mat E= Mat :: eye(4,4,CV_64F);
//全1矩阵,2*2阶,1通道
Mat O=Mat::ones(2,2,CV_32F);
//零矩阵,3*3阶,1通道
Mat F=Mat::zeros(3,3,CV_8UC1);
5、对小矩阵使用都好分隔式初始化
//3*3阶,double深度,1通道
Mat C =(Mat_<double>(3,3)<<0,1,2,3,4,5,6,7,8,9);
6、//使用clone() 函数,
//克隆Mat C的第一行
Mat RowClone = C.row(1).clone();
7、//使用成员函数定义10*3阶矩阵
Mat r=Mat(10,3,CV_8UC3);
randu(r,Scalar::all(0),Scallar::all(255));
矩阵输出格式Python style
cout<<"r(Python style)="<<format(r,"Python")<<";"<<endl<<endl;
输出其他常用的数据结构
使用运算符"<<"打印常用的数据结构
1、//输出2维点
Point2f p(6,2); //定义一个二维点并初始化
cout<<p<<";\n"<<endl;
2、//定义输出3维点
Pont3f p(8,2,0);
cout<<p<<";\n"<<endl;
常用数据结构
Point类
Point p;
p.x=10;
p.y=8;
或者
Point p =Pont(1,8);
颜色表示类:Scalar类
Scalar();表示具有4个元素的数组,如果用不着第4个元素,可以不用写出,默认三个元素
Scalar(a,b,c);
尺寸表示: Size类
成员变量width,height
Size(5,5);//给成员变量赋值
Rect类
http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#Rect_
//颜色空间转换
void cvtColor(InputArray src, OutputArray dst, int code ,int dstCn=0);
http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=cvtcolor#cv2.cvtColor
P4=0表示目标图像取源图像的通道数
基本图形的绘制
直线:line
椭圆:ellipse
矩形:rectangle
圆:circle
绘制填充的多边形:fillpoly
定义ROI
Mat imageROI;
imageROI=imae(Rect(400,400,logo.cols,logo.rows));
//imageROI=image(Range(200,200+logoImae.rows),Range(200,200+logoImage.cols));
Mat srcImage=imread("data.jpg");
if(!srcImage.data)
{
printf("读取失败");
return false;
}
//判断图像读入是否成功