opencv图像中频域滤波去除噪声,使用c++代码
时间: 2023-11-14 21:10:51 浏览: 27
以下是使用OpenCV进行频域滤波去除噪声的C++代码示例:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("lena.jpg", IMREAD_GRAYSCALE); // 读取灰度图像
// 添加高斯噪声
Mat noise(img.size(), CV_8U);
randn(noise, 0, 50);
add(img, noise, img, Mat(), CV_8U);
// 进行离散傅里叶变换
Mat planes[] = { Mat_<float>(img), Mat::zeros(img.size(), CV_32F) };
Mat complexImg;
merge(planes, 2, complexImg);
dft(complexImg, complexImg);
// 构建滤波器
Mat filter = Mat::zeros(img.size(), CV_32F);
circle(filter, Point(img.cols / 2, img.rows / 2), 30, Scalar(1), -1);
// 应用滤波器
Mat filtered;
mulSpectrums(complexImg, filter, filtered, 0);
idft(filtered, filtered);
Mat result;
split(filtered, planes);
normalize(planes[0], result, 0, 255, NORM_MINMAX, CV_8U);
// 显示结果
imshow("Original Image", img);
imshow("Noisy Image", img + noise);
imshow("Filtered Image", result);
waitKey(0);
return 0;
}
```
首先,我们读取灰度图像并添加高斯噪声。然后,我们将图像转换为频域,构建一个圆形的滤波器,将滤波器应用于频域图像,最后将结果转换回空域。最后,我们显示原始图像、带噪声的图像和滤波后的图像。