c++ opencv实现傅里叶变换代码
时间: 2024-02-07 12:02:43 浏览: 67
我很抱歉,我不是一个可以执行代码示例的程序。但是,以下是一个使用OpenCV库实现傅里叶变换的示例代码:
```
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
//读取原始图像
Mat image = imread("lena.jpg", IMREAD_GRAYSCALE);
// 将图像扩展到最佳的尺寸,边界用0填充
Mat padded;
int m = getOptimalDFTSize(image.rows);
int n = getOptimalDFTSize(image.cols);
copyMakeBorder(image, padded, 0, m - image.rows, 0, n - image.cols, BORDER_CONSTANT, Scalar::all(0));
//为傅里叶变换的结果(实部和虚部)分配存储空间
Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };
Mat complexImg;
merge(planes, 2, complexImg);
//傅里叶变换
dft(complexImg, complexImg);
//计算幅度谱
split(complexImg, planes);//planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))
magnitude(planes[0], planes[1], planes[0]);//planes[0] = magnitude
Mat magnitudeImage = planes[0];
//对数幅度谱
magnitudeImage += Scalar::all(1);
log(magnitudeImage, magnitudeImage);
//将幅度谱归一化到[0,1]范围内
normalize(magnitudeImage, magnitudeImage, 0, 1, NORM_MINMAX);
//显示图像
namedWindow("Input Image", WINDOW_AUTOSIZE);
imshow("Input Image", image);
namedWindow("Spectrum Image", WINDOW_AUTOSIZE);
imshow("Spectrum Image", magnitudeImage);
waitKey();
return 0;
}
```
注意:在运行此代码之前,请先确保您已经正确安装了OpenCV库并设置了编译器路径。
阅读全文