opencv去除图像的正弦噪声,c++代码
时间: 2023-11-04 16:17:26 浏览: 97
以下是使用opencv在c语言中去除图像正弦噪声的示例代码:
```c
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("image.jpg", IMREAD_GRAYSCALE); // 读取灰度图像
Mat img_fft;
dft(img, img_fft, DFT_COMPLEX_OUTPUT); // 进行离散傅里叶变换
Mat mag, phase;
split(img_fft, mag, phase); // 分离幅值和相位
// 构建滤波器
int rows = mag.rows;
int cols = mag.cols;
Mat filter(rows, cols, CV_32FC2, Scalar(1, 1));
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
filter.at<Vec2f>(i, j)[0] = (i < rows / 2) ? 1 : 0;
filter.at<Vec2f>(i, j)[1] = (j < cols / 2) ? 1 : 0;
}
}
// 应用滤波器
Mat filtered_fft;
multiply(img_fft, filter, filtered_fft);
// 进行逆变换
Mat filtered_img;
idft(filtered_fft, filtered_img, DFT_SCALE | DFT_REAL_OUTPUT);
// 显示结果
imshow("Original Image", img);
imshow("Filtered Image", filtered_img);
waitKey(0);
return 0;
}
```
这个代码首先读取灰度图像,然后使用离散傅里叶变换将其转换到频域。接下来,我们将幅值和相位分离开来,构建一个滤波器并将其应用于频域表示。最后,我们使用逆变换将图像转换回空域,并显示原始图像和滤波后的图像。
阅读全文