OpenCV4.0学习笔记(9)图像模糊处理,均值滤波,高斯滤波,终值滤波,高斯双边滤波

OpenCV4.0学习笔记(9)图像模糊处理,均值滤波,高斯滤波,中值滤波,高斯双边滤波

在图像中进行各种滤波的原因是为了消除图像中所存在的异常像素点,并且使得图像变得更加平滑
作比喻大概就好像,将一块参差不齐,有很多毛刺的木头用砂纸打磨一遍,更加平滑,而且使得这块木头上某一片区域上升和下降的总体趋势更加明显,在之后的处理上对总体的分析处理更加方便。

理解:简单点讲就是在对于图像所对应的由一个像素点值组成的矩阵上,利用一个小矩阵框(核)从左到右对大矩阵依次进行处理,对矩阵框框住的各个像素点值进行算数运算,最后将值赋予矩阵框最中心的像素点。

均值滤波

均值滤波是最简单的滤波之一
只是将核内的所有值进行均值化赋予中心点

API

blur(处理图像,输出图像,核的大小,锚点(被处理点),边界模式)
//其中对于锚点一般默认Point(-1,-1)为中心点,而边界模式同样有默认值

例:

 blur(src, dst, Size(5, 5), Point(-1, -1));
 imshow(output_title, dst);

高斯滤波

对于均值滤波由于只是简单的求取平均值,很可能破坏图片的许多细节,使得图片太过模糊和平滑,失去随后处理的重要信息。
而高斯滤波利用高斯分布的原理,对图片上的每一个像素点进行加权处理,使得图像与周围上的图像相近,而在整体上具有某个区域的像素值特点,保留更多的细节。但是高斯滤波并不是最高效的滤波。

API

GaussianBlur(处理图像,输出图像,内核大小,x方向标准偏差,y方向标准偏差,边界模式)
//一般情况下x,y方向偏差都设置为0,而有时候处理效果不好的情况下,可以将其设置为0.5或其他值
//同样边界模式有默认值,我们一般不输入其值

例:

 Mat gblur;
 GaussianBlur(src, gblur, Size(11, 11), 0, 0);
 imshow("the third image", gblur);

中值滤波

顾名思义是将核中的数的中间值赋予锚点

API

medianBlur(处理图像, 输出图像, 内核大小)

例:

 Mat mBlur;
 medianBlur(src, mBlur, 3);
 imshow("medianBlur", mBlur);

双边滤波

高斯双边滤波相比于高斯滤波的最大优势就在于双边滤波考虑了,两个区域之间的边界问题,就好像一个区域与另一个区域的像素值相差很大,而这两个区域之间的像素值差别却很小

API

bilateralFilter(处理图像,输出图像,像素邻域的直径,等颜色区域大小等级值,远像素相互影响程度值,边界模式)
//边界模式有默认值通常不输入
 Mat bFilter;
 bilateralFilter(src, bFilter, 15, 150, 3);
 imshow("the bilateralFilter", bFilter);

练习代码

//图像的模糊处理,均值滤波,高斯滤波,中值滤波,高斯双边滤波(美颜祛痘处理)

#include<opencv2/opencv.hpp>
#include<iostream> 
using namespace std;
using namespace cv;
int main(int argv, char** argc)

{
       Mat src, dst;
       src = imread("E:\\text\\text.jpg");
       if (!src.data)
       {
              printf("can't show the image...");
              return -1;
       }
       char input_title[] = "the input image";
       imshow(input_title, src);
       char output_title[] = "the output image"; 

       blur(src, dst, Size(5, 5), Point(-1, -1));
       imshow(output_title, dst);

       /*
       Mat gblur;
       GaussianBlur(src, gblur, Size(11, 11), 0, 0);
       imshow("the third image", gblur);

       */ 
       Mat mBlur;
       medianBlur(src, mBlur, 3);
       imshow("medianBlur", mBlur);

       Mat bFilter;
       bilateralFilter(src, bFilter, 15, 150, 3);
       imshow("the bilateralFilter", bFilter);

       Mat resultImg;
       Mat kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
       filter2D(dst, resultImg, -1, kernel, Point(-1, -1), 0);
       imshow("the changed image", resultImg);
       waitKey(0);
       return 0;

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗头狗不狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值