//运行参数:girl.jpg
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"ml.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"cvcam.lib")
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
inline void cvDoubleMatPrint( const CvMat* mat );
inline void cvDoubleMatSet( CvMat* mat,double v );
inline void cvDoubleMatSet( CvMat* mat);
inline void cvScalarPrint(const CvScalar& s);
int main( int argc, char** argv )
{
IplImage* pImg; //声明IplImage指针
if( argc == 2 && (pImg = cvLoadImage( argv[1], CV_LOAD_IMAGE_UNCHANGED)) != 0 )
{
float arryA[]={1,2,2,
2,1,2,
2,2,1};
//float arryb[]={14,20,15};
//*(6) 特征值与特征向量 (矩阵为方阵):
CvMat* A = cvCreateMat(3,3,CV_32FC1);
cvSetData(A,arryA,CV_AUTOSTEP);
CvMat* E = cvCreateMat(3,3,CV_32FC1);
CvMat* l = cvCreateMat(3,1,CV_32FC1);
cvEigenVV(A, E, l); // l = A 的特征值(递减顺序)
// E = 对应的特征向量 (行向量)
cvDoubleMatPrint(E);
cvDoubleMatPrint(l);
//*/
/*
//输出:
0.430682 0.694268 0.576632
0.140580 -0.682733 0.717017
0.891488 -0.227744 -0.391641
5.562920
-3.612678
0.049759
//matlab:
>> A=[1 2 2;2 1 2;2 2 1]
A =
1 2 2
2 1 2
2 2 1
>> [x y ]=eig(A)
x =
0.6015 0.5522 0.5774
0.1775 -0.7970 0.5774
-0.7789 0.2448 0.5774
y =
-1.0000 0 0
0 -1.0000 0
0 0 5.0000
>>
*/
cvNamedWindow( "Image", 1 ); // 创建窗口
cvShowImage( "Image", pImg ); // 显示图像
cvWaitKey(0); // 等待按键
cvReleaseMat(&A);
cvReleaseMat(&E);
cvReleaseMat(&l);
cvDestroyWindow( "Image" ); // 销毁窗口
cvReleaseImage( &pImg ); // 释放图像
return 0;
}
return -1;
}
inline void cvDoubleMatPrint( const CvMat* mat )
{
int i, j;
for( i = 0; i < mat->rows; i++ )
{
for( j = 0; j < mat->cols; j++ )
{
printf( "%lf ",cvmGet( mat, i, j ) );
}
printf( "\n" );
}
}
inline void cvDoubleMatSet( CvMat* mat,double v )
{
int i, j;
for( i = 0; i < mat->rows; i++ )
{
for( j = 0; j < mat->cols; j++ )
{
cvmSet( mat,i,j,v);
}
}
}
inline void cvDoubleMatSet( CvMat* mat)
{
int i, j;
double v;
for( i = 0; i < mat->rows; i++ )
{
for( j = 0; j < mat->cols; j++ )
{
v=i*10+j;
cvmSet( mat,i,j,v);
}
}
}
inline void cvScalarPrint(const CvScalar& s)
{
printf("\n%f %f %f %f\n",s.val[0],s.val[1],s.val[2],s.val[3]);
//CvScalar t = cvTrace(Ma); // 迹:trace(Ma) -> t.val[0]
}
cvEigenVV 特征值 对应的特征向量
最新推荐文章于 2023-05-04 23:02:16 发布