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);
cvDiv(Ma, Mb,
Mc);
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 );