1

我对opencv很陌生。我需要将代码从matlab转换为opencv。我在matlab中使用fft有问题。我有一个一维矩阵a。我将在下面应用fft。

a = [0;0;0;0;0;0;0;0;0.09707;0.0998;0.1202;-0.1606;-0.0913;0.1523;0.1288];
c = abs(fft(a,15));
c >>     0.3463
    0.1056
    0.3608
    0.5705
    0.4232
    0.2407
    0.1486
    0.1488
    0.1488
    0.1486
    0.2407
    0.4232
    0.5705
    0.3608
    0.1056

C 是我的结果,我从 matlab 获得的。虽然我将为此使用 cvDFT,但结果不同。请帮我举一些例子。我的 c 代码如下...

CvMat* fftin = cvCreateMat(nn,1,CV_64FC2);
CvMat* fftout = cvCreateMat(nn,1,CV_64FC2);
cvZero(b);    ////consider a hav the value of mat b is  empty for imgin
cvMerge(a,b,NULL,NULL,fftin);
cvDFT(fftin,fftout,CV_DXT_FORWARD,0);
cvSplit(fftout,out_real,out_img,0,0);
    for (int i = 0;i<out_real->rows;i++)
    {
        double val11= cvGetReal2D(out_real,i,0);
        double val12= cvGetReal2D(out_img,i,0);
        val11 = abs(val11);
        val12 = abs(val12);
        printf("DFT value is:%f  %f\n",val11,val12);
        cvSetReal2D(C_out,i,0,val11);
    }
4

1 回答 1

0

在您的第一个示例中,您似乎正在打印结果中每个复数值的大小。但是在您的第二个示例中,您似乎正在打印复数值的每个分量的绝对值(例如 X 和 Y,而不是长度或斜边)。

于 2012-05-03T13:14:04.543 回答