C++ 图像matA进行傅里叶变换得到matB,取实部输出存储为图片matC
时间: 2024-05-16 10:17:00 浏览: 71
可以使用OpenCV库来实现这个过程。以下是示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 读取输入图像
Mat img = imread("input.jpg", IMREAD_GRAYSCALE);
if (img.empty()) {
cerr << "Failed to read image!" << endl;
return -1;
}
// 对输入图像进行傅里叶变换
Mat complexImg;
dft(img, complexImg, DFT_COMPLEX_OUTPUT);
// 取得傅里叶变换后的实部
Mat realImg;
magnitude(complexImg, realImg);
normalize(realImg, realImg, 0, 255, NORM_MINMAX);
realImg.convertTo(realImg, CV_8U);
// 保存实部图像
imwrite("output.jpg", realImg);
return 0;
}
```
在上述代码中,`dft()` 函数用于对输入图像进行傅里叶变换,生成一个复数矩阵 `complexImg`。`magnitude()` 函数用于取得 `complexImg` 的幅度,也就是傅里叶变换后的实部(虚部不需要)。`normalize()` 函数用于将幅度归一化到 0-255 的范围内,`convertTo()` 函数用于将幅度转换为 8 位无符号整数类型,便于保存为图像文件。
需要注意的是,这里保存的是实部图像,不是傅里叶变换后的复数矩阵。如果需要保存复数矩阵,可以将 `complexImg` 转换为两个单通道图像保存,分别表示实部和虚部。
阅读全文