EigenVV,cvdiv,GetDims

本文介绍使用cvEigenVV函数计算对称矩阵的特征值和特征向量的方法,包括输入参数说明及函数特点。此外还提供了获取数组维度及大小的相关函数介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EigenVV

计算对称矩阵的特征值和特征向量

void cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals, double eps=0 );
mat
输入对称方阵。在处理过程中将被改变。
evects
特征向量输出矩阵, 连续按行存储
evals
特征值输出矩阵,按降序存储(当然特征值和特征向量的排序是同步的)。
eps
对角化的精确度 (典型地, DBL_EPSILON=≈10-15 就足够了)。

函数 cvEigenVV 计算矩阵 A 的特征值和特征向量:

mat*evects(i,:)' = evals(i)*evects(i,:)' (在 MATLAB 的记法)

矩阵 A 的数据将会被这个函数修改。

目前这个函数比函数 cvSVD 要慢,精确度要低, 如果已知 A 是正定的,(例如, 它是一个协方差矩阵), 它通常被交给函数 cvSVD 来计算其特征值和特征向量,尤其是在不需要计算特征向量的情况下

 

 

 

CvScalar s;
s=cvGet2D(img,i,j); //img就是IplImage指针了
如果图像是单通道的话就是只有s.val[0]有像素值
如果是3通道的就s.val[0]s.val[1]s.val[2]分别对应了像素的B G R这样够明了了吧?不过据说这个方法是比较慢的,但是好理解,你熟悉的话,
img->imageData 就是指向像素数据的指针,喜欢取哪个点就移动指针就OK了


cvMul(Ma, Mb, Mc);      // Ma.*Mb  -> Mc
cvDiv(Ma, Mb, Mc);      // Ma./Mb  -> Mc

 

 

 

  float vals[]={0.9 , 0.4, 0.5 , 0.1};

 CvMat  rotmat;
 cvInitMatHeader(&rotmat,2,2,CV_32FC1,vals);
 cvDiv(NULL,&rotmat,&rotmat);
 cout<<CV_MAT_ELEM(rotmat,float,0,1);

 

 

 

 

GetDims, GetDimSize

返回数组维数和他们的大小或者殊维的大小

int cvGetDims( const CvArr* arr, int* sizes=NULL );
int cvGetDimSize( const CvArr* arr, int index );
arr
输入数组.
sizes
可选的输出数组维尺寸向量,对于2D数组第一位是数组行数(高),第二位是数组列数(宽)
index
以0为基准的维索引下标(对于矩阵0意味着行数,1意味着列数,对于图象0意味着高,1意味着宽。

函数 cvGetDims 返回维数和他们的大小。如果是 IplImage 或 CvMat 总是返回2,不管图像/矩阵行数。函数 cvGetDimSize 返回特定的维大小(每维的元素数)。例如,接下来的代码使用二种方法计算数组元素总数。

// via cvGetDims()
int sizes[CV_MAX_DIM];
int i, total = 1;
int dims = cvGetDims( arr, size );
for( i = 0; i < dims; i++ )
    total *= sizes[i];

// via cvGetDims() and cvGetDimSize()
int i, total = 1;
int dims = cvGetDims( arr );
for( i = 0; i < dims; i++ )
    total *= cvGetDimsSize( arr, i );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值