本文主要是介绍【OpenCV】图像平滑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
图像平滑
平滑是smoothing,也称blurring。在图像处理中经常用到,其中一个用途就是降噪。图像平滑通过滤波器来实现,h(k,l)是掩模:
常用平滑滤波器有:
1. 归一化滤波器: 输出像素值是核窗口内像素值的均值 ( 所有像素加权系数相等)。
2. 高斯滤波器: 高斯滤波是将输入数组的每一个像素点与高斯内核卷积,将卷积和当作输出像素值。
3. 中值滤波器:新像素值用邻域中像素的中值代替 。
4. 双边滤波器:保边去噪,避免模糊边缘。
代码示例
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>using namespace std;
using namespace cv;int KERNEL_LENGTH = 15;Mat src, dst;int main(int argc, char** argv)
{const char* filename = "../data/lena.jpg";src = imread(filename, IMREAD_COLOR);if (src.empty()){printf("Error Opening Image");return -1;}imshow("src", src);blur(src, dst, Size(KERNEL_LENGTH, KERNEL_LENGTH), Point(-1, -1)); // 归一化滤波 imshow("Normalized Block Filter", dst);GaussianBlur(src, dst, Size(KERNEL_LENGTH, KERNEL_LENGTH), 0, 0); // 高斯滤波imshow("Gaussian Filter", dst);medianBlur(src, dst, KERNEL_LENGTH); // 中值滤波imshow("Median Filter", dst);bilateralFilter(src, dst, KERNEL_LENGTH, KERNEL_LENGTH * 2, KERNEL_LENGTH / 2); // 双边滤波imshow("Bilateral Filter", dst);waitKey(0);return 0;
}
运行结果
这篇关于【OpenCV】图像平滑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!