opencv中提供了傅里叶变换函数cvDFT,执行二维浮点数离散傅里叶变换的代码如下:
void fft2(const IplImage* src, IplImage* dst)
{
//实部、虚部
IplImage *image_Re = 0, *image_Im = 0, *Fourier = 0;
image_Re = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F, 1); //实部
image_Im = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F, 1); //虚部
Fourier = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F, 2); //二通道图像
//将实部从8u转换为32f
cvConvertScale(src, image_Re);
// 虚部置零
cvZero(image_Im);
//将实部与虚部合并到Fourier中
cvMerge(image_Re, image_Im, 0, 0, Fourier);
// 进行正向离散傅里叶变换
cvDFT(Fourier, dst, CV_DXT_FORWARD);
cvReleaseImage(&image_Re);
cvReleaseImage(&image_Im);
cvReleaseImage(&Fourier);
}
将图像中心移到原点:
void cvShiftDFT(CvArr* src, CvArr* dst)
{
//定义变量
CvMat * tmp;
CvMat