Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV库中的PCA源代码 以下API函数是OpenCV库中PCA的源代码:_Opencv_Pca_Eigenvector_Eigenvalue - Fatal编程技术网

OpenCV库中的PCA源代码 以下API函数是OpenCV库中PCA的源代码:

OpenCV库中的PCA源代码 以下API函数是OpenCV库中PCA的源代码:,opencv,pca,eigenvector,eigenvalue,Opencv,Pca,Eigenvector,Eigenvalue,此函数来自Eigenobjects.cpp 我不理解以下代码: (i=0;i

此函数来自Eigenobjects.cpp

我不理解以下代码: (i=0;i*/ { 浮点*be=((浮点**)输出)[i]; 对于(p=0;pcallback; r=(CvStatus)读取回调(k,(void*)buf,userData); if(r) { 无cv(&ev); 如果(iev) 无CVE(和eigVals); if(缓冲区) cvFree(缓冲区和缓冲区); 如果(buf) 无CVF(&buf); 返回r; } } 对于(i=0;i 我知道PCA是通过计算协方差矩阵及其特征值和特征向量来实现的,但是当函数的一部分调用内部函数icvCalcCovarMatrixEx_8u32fR()来计算特征值和特征向量,然后“上述代码在[其他部分]中的用途是什么?”?我猜[其他部分]是计算本征向量,但函数icvCalcCovarMatrixEx_8u32fR()已经完成了, 那么,有没有人能帮我回答这个代码的目的?谢谢

static CvStatus CV_STDCALL icvCalcEigenObjects_8u32fR( int nObjects, void* input, int objStep,
                        void* output, int eigStep, CvSize size,
                        int  ioFlags, int ioBufSize, void* userData,
                        CvTermCriteria* calcLimit, float* avg,
                        int    avgStep, float  *eigVals )
    for( i = 0; i < m1; i++ )       /* e.o. annulation */
    {
        float *be = ((float **) output)[i];

        for( p = 0; p < eigSize.height; p++, be += eigStep )
            for( l = 0; l < eigSize.width; l++ )
                be[l] = 0.0f;
    }

    for( k = 0; k < nObjects; k++ )
    {
        uchar *bv = (ioFlags & CV_EIGOBJ_INPUT_CALLBACK) ? buf : ((uchar **) input)[k];

        if( ioFlags & CV_EIGOBJ_INPUT_CALLBACK )
        {
            CvCallback read_callback = ((CvInput *) & input)->callback;

            r = (CvStatus)read_callback( k, (void *) buf, userData );
            if( r )
            {
                cvFree( &ev );
                if( iev )
                    cvFree( &eigVals );
                if( buffer )
                    cvFree( &buffer );
                if( buf )
                    cvFree( &buf );
                return r;
            }
        }

        for( i = 0; i < m1; i++ )
        {
            float v = eigVals[i] * ev[i * nObjects + k];
            float *be = ((float **) output)[i];
            uchar *bu = bv;

            bf = avg;

            for( p = 0; p < size.height; p++, bu += objStep1,
                 bf += avgStep, be += eigStep1 )
            {
                for( l = 0; l < size.width - 3; l += 4 )
                {
                    float f = bf[l];
                    uchar u = bu[l];

                    be[l] += v * (u - f);
                    f = bf[l + 1];
                    u = bu[l + 1];
                    be[l + 1] += v * (u - f);
                    f = bf[l + 2];
                    u = bu[l + 2];
                    be[l + 2] += v * (u - f);
                    f = bf[l + 3];
                    u = bu[l + 3];
                    be[l + 3] += v * (u - f);
                }
                for( ; l < size.width; l++ )
                    be[l] += v * (bu[l] - bf[l]);
            }
        }                   /* i */
    }                       /* k */