1,关键Opencv类
Point_ :2D点模板
Point3_ :3D点模板
Size_ :size(width,height)模板
Vec :S 向量模板
Matx :小矩阵模板
Scalar: 4 元素向量
Rech :矩形
Range:整数值的范围
Mat :2D或多维稠密数组(可表示矩阵,图像,直方图,特征描述子,体元素,容量)
SparseMat :多维稀疏数组
Ptr :智能指针模板类
2 Matrix 基础
创建矩阵:
Mat image(240,320,CV_8UC3);
//分配或重分配一个预声明的矩阵
image.create(480,640,CV_8UC3);
创建一个初始化常量值的矩阵
Mat A33(3,3,CV_32F,Scalar(5));
Mat B33(3,3,CV_32F);B33=Scalar(5);
Mat C33=Mat::ones(3,3,CV_32F)*5.;
Mat D33=Mat::zeros(3,3,CV_32F)+5.;//注意5后加了一个小数点,转换为float型
创建一个初始化为指定值的矩阵
double a=CV_PI/3;
Mat A22=(Mat_<float>(2,2)<< //创建一个2*2矩阵,并赋初始值为下面的值
cos(a),-sin(a),sin(a),cos(a));
float B22data[]={cos(a),-sina(a),sin(a),cos(a)};
Mat B22=Mat(2,2,CV_32F,B22data).clone();
初始化随机矩阵
randu(image,Scalar(0),Scalar(256));// 均匀分布
randn(image,Scalar(128),Scalar(10));//高斯分布
矩阵与其它结构的相互转换(未复制数据)
Mat image_alias=image;//赋值相当于浅复制
float* Idata=new float[480*640*3];
Mat I(480,640,CV_32FC3,Idata);
vector<Point> iptvec(10);
Mat iP(iptvec);//iP 是一个10*1的32SC2的矩阵
IplImage * oldC0 =cvCreateImage(cvSize(320,240),16,1);
Mat newC=cvarrToMat(oldC0);
IplImage oldC1=newC; CvMat oldC2=newC;
//复制数据
A33.at<float>(i,j)=A33.at<float>(j,i)+1;
Mat dyImage(image.size(),image.type());
for(int y=1;y<image.rows-1;y++)
{
Vec3b * prevRow=image.ptr<Vec3b>(y-1);
Vec3b * nextRow=image.ptr<Vec3b>(y+1);
for(int x=0;x<image.cols;x++)
{
for(int c=0;c<3;c++)
{
dyImage.at<Vec3b>(y,x)[c]=saturate_cast<uchar>(nextRow[x][c]-preRow[x][c]);
}
}
Mat_<Vec3b>::iterator it=image.begin<Vec3b>();
itend=image.end<Vec3b>();
for(;it!=itend;++it)
(*it)[1]=^=255
}