用c++代码写一个傅里叶变换处理图像的例子
时间: 2024-05-11 15:20:27 浏览: 102
c++实现傅里叶变换的程序
5星 · 资源好评率100%
以下是一个使用OpenCV库实现傅里叶变换的示例代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读入图像
Mat img = imread("test.jpg", IMREAD_GRAYSCALE);
if (img.empty())
{
cout << "Could not read image" << endl;
return -1;
}
// 执行傅里叶变换
Mat complexImg;
dft(img, complexImg, DFT_COMPLEX_OUTPUT);
// 将零频率分量移到中心
shift(complexImg, complexImg);
// 显示原始图像和频域图像
imshow("Input Image", img);
Mat magnitudeImg;
magnitude(complexImg, magnitudeImg);
magnitudeImg += Scalar::all(1);
log(magnitudeImg, magnitudeImg);
normalize(magnitudeImg, magnitudeImg, 0, 1, NORM_MINMAX);
imshow("Spectrum Magnitude", magnitudeImg);
// 逆傅里叶变换
Mat invImg;
dft(complexImg, invImg, DFT_INVERSE | DFT_REAL_OUTPUT);
normalize(invImg, invImg, 0, 255, NORM_MINMAX);
imshow("Reconstructed Image", invImg);
waitKey();
return 0;
}
```
该代码读入一张灰度图像,并对其执行傅里叶变换。然后,它将零频率分量移到中心,显示原始图像和频域图像。接下来,它执行逆傅里叶变换,并显示重建的图像。
阅读全文