opencv图像中余弦噪声去除,使用c++代码
时间: 2023-11-14 11:23:46 浏览: 78
以下是使用C语言实现对OpenCV图像中余弦噪声去除的代码:
```c
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("image.jpg", IMREAD_GRAYSCALE);
if (image.empty())
{
printf("Image not found!");
return -1;
}
Mat noisy_image = image.clone();
float amplitude = 50.0; //设置余弦噪声的振幅
for (int i = 0; i < noisy_image.rows; i++)
{
for (int j = 0; j < noisy_image.cols; j++)
{
noisy_image.at<uchar>(i, j) += amplitude * cos(2 * CV_PI * i / 32.0) + amplitude * cos(2 * CV_PI * j / 32.0);
}
}
imshow("Noisy Image", noisy_image);
Mat filtered_image = noisy_image.clone();
float alpha = 1.0; //设置平滑滤波器的参数
for (int i = 0; i < filtered_image.rows; i++)
{
for (int j = 0; j < filtered_image.cols; j++)
{
float sum = 0.0;
float count = 0.0;
for (int k = i - 1; k <= i + 1; k++)
{
for (int l = j - 1; l <= j + 1; l++)
{
if (k >= 0 && k < filtered_image.rows && l >= 0 && l < filtered_image.cols)
{
sum += alpha * filtered_image.at<uchar>(k, l);
count += alpha;
}
}
}
filtered_image.at<uchar>(i, j) = (uchar)(sum / count);
}
}
imshow("Filtered Image", filtered_image);
waitKey(0);
return 0;
}
```
该代码首先读取一张灰度图像,然后为其添加余弦噪声。接着使用平滑滤波器将噪声去除。在这个例子中,平滑滤波器是一个3x3的滤波器,每个像素周围3x3个像素的像素值被平均计算,其中平均值的参数alpha可以调整,以控制平滑的程度。
最后,使用imshow()函数将原始图像和去噪后的图像显示在屏幕上。用户可以使用waitKey()函数等待按键输入,然后程序退出。
阅读全文