opencv快速傅里叶变换c++
时间: 2024-01-04 20:20:42 浏览: 84
以下是使用OpenCV进行快速傅里叶变换的C++示例:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
// 将图像尺寸调整为最优尺寸
int optimalSize = cv::getOptimalDFTSize(image.rows);
cv::Mat padded;
cv::copyMakeBorder(image, padded, 0, optimalSize - image.rows, 0, optimalSize - image.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));
// 创建一个与padded相同大小的复数数组
cv::Mat complexImage;
cv::dft(padded, complexImage, cv::DFT_COMPLEX_OUTPUT);
// 将复数数组分成实部和虚部
std::vector<cv::Mat> planes;
cv::split(complexImage, planes);
// 计算幅度谱
cv::Mat magnitude;
cv::magnitude(planes[0], planes[1], magnitude);
// 对数变换
magnitude += cv::Scalar::all(1);
cv::log(magnitude, magnitude);
// 归一化
cv::normalize(magnitude, magnitude, 0, 1, cv::NORM_MINMAX);
// 显示结果
cv::imshow("Magnitude Spectrum", magnitude);
cv::waitKey(0);
return 0;
}
```
阅读全文