【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;
}


运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值