【OpenCV】图像平滑

来源:互联网 发布:澳大利亚同性婚姻知乎 编辑:程序博客网 时间:2024/06/01 20:35

图像平滑

  平滑是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;}


运行结果

原创粉丝点击