OpenCV2.4.10
Visual Studio 2010
1.CvMat结构体:多通道矩阵、矩阵头typedef struct CvMat{ int type;//数据类型,比如CV_32FC1含义是32位浮点型单通道, // 再比如CV_8UC3含义是8位无符号整型三通道 int step;//以字节为单位的行数据长度:元素个数*元素类型的字节长度 /* for internal use only */int* refcount;//数据引用计数inthdr_refcount; union{ //指向data数据的第一个元素 uchar* ptr;//无符号类型 short* s;//短整型 int* i;//整型 float* fl;//浮点 double* db;//双精度} data;//共同体data,里面成员公用一个空间,也就是说数据类型可以有这五种。 #ifdef __cplusplusunion{ int rows;//行 int height;//高}; union{ int cols;//列 int width;//宽};#elseint rows;int cols;#endif }CvMat;
2.CvMat的基本操作:①CvMat* cvCreateMat(int rows, int cols, int type);功能:分配矩阵空间参数:type: 矩阵元素类型,格式为CV_
3、矩阵计算①:矩阵与矩阵:+、-、*运算CvMat *Ma,*Mb,*Mc;cvAdd(Ma,Mb,Mc);//Ma+Mb-->MccvSub(Ma,Mb,Mc);// Ma-Mb-->MccvMatMul(Ma,Mb,Mc);// Ma*Mb->Mc②:按元素的矩阵操作:.*、./、CvMat *Ma,*Mb,Mc;cvMul(Ma,Mb,Mc);//Ma .* Mb-->Mc对应元素相乘cvDiv(Ma,Mb,Mc);//Ma ./ Mb-->Mc对应元素相除cvAddS(Ma,cvScalar(-10.0),Mc);//Ma.-10-->Mc③:向量乘积:double va[] = {1, 2, 3};double vb[] = {0, 0, 1};double vc[3];CvMat Va=cvMat(3, 1, CV_64FC1, va);CvMat Vb=cvMat(3, 1, CV_64FC1, vb);CvMat Vc=cvMat(3, 1, CV_64FC1, vc);double res=cvDotProduct(&Va,&Vb); // 点乘: Va . Vb -> rescvCrossProduct(&Va, &Vb, &Vc); // 向量积: Va x Vb -> Vc【注】:Va,Vb,Vc在向量积中向量元素个数须相同.
4.CvMat矩阵方程:①:单矩阵操作CvMat *Ma, *Mb;//注:不能对自身进行转置cvTranspose(Ma, Mb); // transpose(Ma) -> MbCvScalar t = cvTrace(Ma); // trace(Ma) -> t.val[0]double d = cvDet(Ma); // det(Ma) -> d 行列式cvInvert(Ma, Mb); // inv(Ma) -> Mb②:非齐次线性方程求解:CvMat* A = cvCreateMat(3,3,CV_32FC1);CvMat* x = cvCreateMat(3,1,CV_32FC1);CvMat* b = cvCreateMat(3,1,CV_32FC1);cvSolve(&A, &b, &x); // solve (Ax=b) for x③特征值分析(针对对称矩阵):CvMat* A = cvCreateMat(3,3,CV_32FC1);CvMat* E = cvCreateMat(3,3,CV_32FC1);CvMat* l = cvCreateMat(3,1,CV_32FC1);cvEigenVV(&A, &E, &l); // l = A的特征值 (降序排列) , E = 对应的特征向量 (每行)④:奇异值分解SVD:CvMat* A = cvCreateMat(3,3,CV_32FC1);CvMat* U = cvCreateMat(3,3,CV_32FC1);CvMat* D = cvCreateMat(3,3,CV_32FC1);CvMat* V = cvCreateMat(3,3,CV_32FC1);cvSVD(A, D, U, V, CV_SVD_U_T|CV_SVD_V_T); // A = U D V^T
5.CvMat、IplImage、Mat相互转换如下所示:
6.CvMat矩阵数据访问:CvMat中type:CV_
CvMat IplImage Mat的类型转换
CvMat矩阵元素访问