ubuntu环境下编写均值滤波算法
时间: 2024-02-17 07:04:23 浏览: 74
以下是在 Ubuntu 环境下编写均值滤波算法的示例代码:
```c++
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
// 定义均值滤波函数
Mat meanFilter(Mat img, int kernel_size) {
Mat filtered_img;
int k = kernel_size / 2;
int sum, count;
for (int i = k; i < img.rows - k; i++) {
for (int j = k; j < img.cols - k; j++) {
sum = 0;
count = 0;
for (int m = -k; m <= k; m++) {
for (int n = -k; n <= k; n++) {
sum += img.at<uchar>(i + m, j + n);
count++;
}
}
filtered_img.at<uchar>(i, j) = sum / count;
}
}
return filtered_img;
}
int main() {
// 读取图像
Mat img = imread("lena.png", IMREAD_GRAYSCALE);
// 对图像进行均值滤波,kernel_size 为 3
Mat filtered_img = meanFilter(img, 3);
// 显示原图和滤波后的图像
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", img);
namedWindow("Filtered Image", WINDOW_NORMAL);
imshow("Filtered Image", filtered_img);
waitKey(0);
return 0;
}
```
上面的代码中,我们使用了 OpenCV 库来读取图像,并且使用了 OpenCV 的 `Mat` 类型来表示图像。`meanFilter` 函数接受一个图像和一个 kernel_size,然后返回一个经过均值滤波处理后的图像。在函数中,我们首先计算出 kernel 的一半 k,然后对图像进行遍历,对于每个像素,计算它周围 kernel_size * kernel_size 个像素的均值,并将计算结果赋值给滤波后的图像。最后,返回滤波后的图像。
在 `main` 函数中,我们读取了一张灰度图像,并对它进行了均值滤波,kernel_size 为 3。最后使用 OpenCV 的 `imshow` 函数显示原图和滤波后的图像。
阅读全文