OpenCV实现Matlab的fft2、ifft2函数

本文介绍了如何使用OpenCV来实现与Matlab的fft2和ifft2函数相匹配的功能。内容包括OpenCV中复数的表示方式、fft2的实现细节以及ifft2的实现,特别强调了数据格式转换和结果缩放的重要性。此外,作者还分享了相关代码,并在GitHub上更新,期待更多的交流和反馈。

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

看标题就知道跟我的上一篇博客差不多了,本来没打算写这篇的,因为之前在网上搜过,有现成的OpenCV实现fft2和ifft2代码,而且我也试过fft2确实和Matlab计算的结果一致。但是项目后来又用到了ifft2,这次发现计算结果跟Matlab怎么都对不上,实在没办法,我只能自己摸索,后面也对网上的fft2代码进行了完善,现在一起发出来。

要用OpenCV实现傅里叶变换,首先要知道复数在OpenCV中是如何表示的,然后才能理解fft2和ifft2的实现。

一、复数在OpenCV中的表示方式

OpenCV的mat类没有专门的复数数据类型,可以将两个二维的Mat,一个存储实部,一个存储虚部,merge在一起,形成存储虚数的Mat。或者直接定义类似CV_64FC2格式的Mat,如下所示:

// 第一种方式,定义实部和虚部
Mat real = Mat::zeros(3, 3, CV_64F);
Mat imag = Mat::zeros(3, 3, CV_64F);
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        real.at<double>(i, j) = i * 3 + j;
        imag.at<double>(i, j) = i * 3 + j;
    }
}
Mat planes[2] = { 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值