opencv使用cvDFT 傅立叶转换的例子

本文通过一个简单的C语言程序演示了离散傅立叶变换(DFT)及其逆变换的应用。程序首先创建了一个包含0到31的矩阵,并通过DFT转换到频域,再通过逆DFT返回时域,验证了变换的有效性。

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

 

int main(int argc, char* argv[])
{


    unsigned 
int i;
    CvMat
* s = cvCreateMat(1,32,CV_32FC1);
    CvMat
* d = cvCreateMat(1,32,CV_32FC1);
    CvMat
* s2 = cvCreateMat(1,32,CV_32FC1);
    
for(i=0;i<32;i++)
        cvSetReal2D(s,
0,i,i);

    
//显示一下输入信号
    for(i=0;i<32;i++)
        printf(
"%6.2f ",cvGetReal2D(s,0,i));
    printf(
" ");

    
//DFT 离散傅立叶变换
    cvDFT(s,d,CV_DXT_FORWARD);     //CV_DXT_FORWARD 代表了正变换:空域-〉频域

    printf(
"The result of DFT: ");
    
for(i=0;i<32;i++)
        printf(
"%6.2f ",cvGetReal2D(d,0,i));

    
//DFT 离散傅立叶逆变换
    cvDFT(d,s2,CV_DXT_INVERSE); //逆变换
    printf(" The result of IDFT: ");
    
for(i=0;i<32;i++)
        printf(
"%6.2f ",cvGetReal2D(s2,0,i));
    printf(
" ");

    system(
"pause");


    
return 0;



}

结果:

 

  0.00    1.00    2.00    3.00    4.00    5.00    6.00    7.00    8.00    9.00
 
10.00   11.00   12.00   13.00   14.00   15.00   16.00   17.00   18.00   19.00
 
20.00   21.00   22.00   23.00   24.00   25.00   26.00   27.00   28.00   29.00
 
30.00   31.00
The result of DFT:
496.00  -16.00  162.45  -16.00   80.44  -16.00   52.74  -16.00   38.63  -16.00
 
29.93  -16.00   23.95  -16.00   19.50  -16.00   16.00  -16.00   13.13  -16.00
 
10.69  -16.00    8.55  -16.00    6.63  -16.00    4.85  -16.00    3.18  -16.00
  
1.58  -16.00
The result of IDFT:
  
0.00   32.00   64.00   96.00  128.00  160.00  192.00  224.00  256.00  288.00
320.00  352.00  384.00  416.00  448.00  480.00  512.00  544.00  576.00  608.00
640.00  672.00  704.00  736.00  768.00  800.00  832.00  864.00  896.00  928.00
960.00  992.00
Press any key to 
continue . . .
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值