矩阵和图像的操作
(1)cvCalcCovarMatrix函数
其结构
void cvCalcCovarMatrix(计算给定点的均值和协方差矩阵 const CvArr** vects,//给定向量 int count,//给定向量的组数 CvArr* cov_mat,//结果矩阵 CvArr* avg,//依据flag得到结果 int flags//标记位 );
标志參数的详细标志值 |
意义 |
CV_COVAR_NORMAL |
计算均值和协方差 |
CV_COVAR__SCRAMBLED |
高速PCA”Scrambled”协方差 |
CV_COVAR_USE_AVERAGE |
输入均值而不是计算均值 |
CV_COVAR_SCALE |
又一次缩放输出的协方差矩阵 |
实例程序
#include <cv.h> #include <stdio.h> #include <stdlib.h> float Coordinates[ 20 ]={ 1.5 , 2.3 , 3.0 , 1.7 , 1.2 , 2.9 , 2.1 , 2.2 , 3.1 , 3.1 , 1.3 , 2.7 , 2.0 , 1.7 , 1.0 , 2.0 , 0.5 , 0.6 , 1.0 , 0.9 }; int main() { CvMat *Vector[ 1 ]; CvMat *Vector1; CvMat *CovarMatrix; CvMat *avg; Vector1=cvCreateMat( 10 , 2 ,CV_32FC1); cvSetData(Vector1,Coordinates,Vector1->step); Vector[ 0 ]=Vector1; CovarMatrix=cvCreateMat( 2 , 2 ,CV_32FC1); avg=cvCreateMat( 1 , 2 ,CV_32FC1); cvCalcCovarMatrix(( const CvArr **)Vector, 10 ,CovarMatrix,avg,CV_COVAR_SCALE+CV_COVAR_NORMAL+CV_COVAR_ROWS); for ( int i= 0 ;i< 2 ;i++) { for ( int j= 0 ;j< 2 ;j++) { printf( "%f " ,cvGetReal2D(CovarMatrix,i,j)); } printf( " " ); } for ( int i= 0 ;i< 1 ;i++) { for ( int j= 0 ;j< 2 ;j++) { printf( "%f " ,cvGetReal2D(avg,i,j)); } printf( " " ); } getchar(); return 0; }
输出结果
(2)cvCmp函数
其结构
void cvCmp(//比較两幅对应的图像的像素点 const CvArr* src1,//图像一 const CvArr* src2,//图像二 CvArr* dst,//结果矩阵 int cmp_op//标记參数 );
cmp_op的值 |
比較方法 |
CV_CMP_EQ |
(src1i == src2i) |
CV_CMP_GT |
(src1i > src2i) |
CV_CMP_GE |
(src1i >= src2i) |
CV_CMP_LT |
(src1i < src2i) |
CV_CMP_LE |
(src1i <= src2i) |
CV_CMP_NE |
(src1i != src2i) |
实例程序
#include <cv.h> #include <highgui.h> #include <stdio.h> int main(int argc, char** argv) { IplImage *src1, *src2,*src3; src1=cvLoadImage("5.jpg"); src2=cvLoadImage("6.jpg"); src3=cvLoadImage("5.jpg"); cvCmp(src1,src2,src3,CV_CMP_GE); cvShowImage( "測试1", src1); cvShowImage( "測试2", src2); cvShowImage( "測试3", src3); cvWaitKey(); return 0; }
输出结果
(3)cvCmpS函数
其结构
void cvCmpS(//比較图像的像素点与value const CvArr* src1,//图像 double value,//给定值 CvArr* dst,//结果矩阵 int cmp_op//标记參数 );
当中cmp_op參数的值与上个函数同样
实例程序
#include <cv.h> #include <highgui.h> #include <stdio.h> int main(int argc, char** argv) { IplImage *src1,*src2; src1=cvLoadImage("5.jpg"); src2=cvLoadImage("5.jpg"); cvCmpS(src1,250.2,src2,CV_CMP_GE); cvShowImage( "測试1", src1); cvShowImage( "測试2", src2); cvWaitKey(); return 0; }
输出结果
to be continued