快速中值滤波算法c++实现
时间: 2023-11-30 16:43:16 浏览: 38
以下是快速中值滤波算法的C++实现:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 快速中值滤波算法
void fastMedianFilter(const cv::Mat& src, cv::Mat& dst, int ksize) {
int r = ksize / 2;
int rows = src.rows, cols = src.cols;
dst.create(rows, cols, src.type());
vector<int> window(ksize * ksize);
for (int i = r; i < rows - r; ++i) {
for (int j = r; j < cols - r; ++j) {
int index = 0;
for (int m = -r; m <= r; ++m) {
for (int n = -r; n <= r; ++n) {
window[index++] = src.at<uchar>(i + m, j + n);
}
}
sort(window.begin(), window.end());
dst.at<uchar>(i, j) = window[ksize * ksize / 2];
}
}
}
// 测试
int main() {
cv::Mat src = cv::imread("test.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat dst;
fastMedianFilter(src, dst, 3);
cv::imshow("src", src);
cv::imshow("dst", dst);
cv::waitKey(0);
return 0;
}
```
其中,`fastMedianFilter`函数实现了快速中值滤波算法,`src`为输入图像,`dst`为输出图像,`ksize`为滤波器大小。在函数中,首先定义了一个大小为`ksize*ksize`的窗口`window`,然后遍历输入图像的每个像素,将该像素周围的`ksize*ksize`个像素值存入窗口中,然后对窗口中的像素值进行排序,取中间值作为该像素的输出值。