c++编写均值滤波算法
时间: 2023-07-26 12:11:21 浏览: 89
C语言写的简单均值滤波算法
5星 · 资源好评率100%
以下是一个简单的 C++ 实现均值滤波算法的示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 定义均值滤波函数
vector<vector<int>> meanFilter(vector<vector<int>> img, int kernel_size) {
int height = img.size();
int width = img[0].size();
vector<vector<int>> filtered_img(height, vector<int>(width, 0));
int k = kernel_size / 2;
int sum, count;
for (int i = k; i < height - k; i++) {
for (int j = k; j < width - k; j++) {
sum = 0;
count = 0;
for (int m = -k; m <= k; m++) {
for (int n = -k; n <= k; n++) {
sum += img[i + m][j + n];
count++;
}
}
filtered_img[i][j] = sum / count;
}
}
return filtered_img;
}
int main() {
// 定义一个 5*5 的图像
vector<vector<int>> img = {
{2, 3, 4, 3, 2},
{3, 4, 5, 4, 3},
{4, 5, 6, 5, 4},
{3, 4, 5, 4, 3},
{2, 3, 4, 3, 2}
};
// 对图像进行均值滤波,kernel_size 为 3
vector<vector<int>> filtered_img = meanFilter(img, 3);
// 输出滤波后的图像
for (int i = 0; i < filtered_img.size(); i++) {
for (int j = 0; j < filtered_img[0].size(); j++) {
cout << filtered_img[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
上面的代码中,`meanFilter` 函数接受一个图像和一个 kernel_size,然后返回一个经过均值滤波处理后的图像。在函数中,我们首先计算出 kernel 的一半 k,然后对图像进行遍历,对于每个像素,计算它周围 kernel_size * kernel_size 个像素的均值,并将计算结果赋值给滤波后的图像。最后,返回滤波后的图像。
在 `main` 函数中,我们定义了一个 5*5 的图像,然后对它进行了均值滤波,kernel_size 为 3。最后输出了滤波后的图像。
阅读全文