用c++写个滤波算法
时间: 2024-05-25 18:06:34 浏览: 102
好用的C语言滤波算法
以下是一个用C++编写的均值滤波算法的示例:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
cv::Mat meanFilter(const cv::Mat& image, int threshold)
{
cv::Mat filteredImage = image.clone();
int kernelSize = 3; // 设置滤波器的大小为3x3
for (int i = 1; i < image.rows - 1; i++)
{
for (int j = 1; j < image.cols - 1; j++)
{
int sum = 0;
int count = 0;
for (int k = -1; k <= 1; k++)
{
for (int l = -1; l <= 1; l++)
{
int pixelValue = image.at<uchar>(i + k, j + l);
int diff = std::abs(pixelValue - image.at<uchar>(i, j));
if (diff > threshold)
{
sum += pixelValue;
count++;
}
}
}
if (count > 0)
{
filteredImage.at<uchar>(i, j) = sum / count;
}
}
}
return filteredImage;
}
int main()
{
cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像
cv::Mat filteredImage = meanFilter(image, 10); // 使用阈值为10的均值滤波器进行滤波
cv::imshow("Original Image", image);
cv::imshow("Filtered Image", filteredImage);
cv::waitKey(0);
return 0;
}
```
这个示例代码使用OpenCV库实现了一个简单的均值滤波算法。它遍历图像的每个像素,并计算中心像素与周围像素的差异。如果差异大于阈值,则将周围像素的平均值作为中心像素的新值。最后,它返回滤波后的图像。
阅读全文