博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV(iOS)平滑处理(模糊,毛玻璃)(10)
阅读量:6239 次
发布时间:2019-06-22

本文共 1820 字,大约阅读时间需要 6 分钟。

原理

归一化块滤波器 (Normalized Box Filter)

高斯滤波器 (Gaussian Filter)

中值滤波器 (Median Filter)

中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替 。

双边滤波 (Bilateral Filter)

目前我们了解的滤波器都是为了平滑图像, 问题是有些时候这些滤波器不仅仅削弱了噪声, 连带着把边缘也给磨掉了。 为避免这样的情形 (至少在一定程度上 ), 我们可以使用双边滤波。

类似于高斯滤波器,双边滤波器也给每一个邻域像素分配一个加权系数。 这些加权系数包含两个部分, 第一部分加权方式与高斯滤波一样,第二部分的权重则取决于该邻域像素与当前像素的灰度差值。

函数介绍:

(1)均值平滑函数(均值滤波器)(blur)(所有像素加权系数相等)

blur(InputArraysrc,  // 输入图像    

        OutputArray dst,  // 输出图像    

        Size ksize,      // Size(w,h ): 定义内核大小(w像素宽度, h 像素高度)    

         Point anchor = Point(-1,-1),  // Point(-1,-1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点   

          int borderType = BORDER_DEFAULT);  // 可省略不写

(2)高斯平滑函数(高斯滤波器)(GaussianBlur)(中间像素的加权系数是最大的, 周边像素的加权系数随着它们远离中间像素的距离增大而逐渐减小。)

GaussianBlur(InputArray src,// 输入图像

                        OutputArray dst,// 输出图像

                         Size ksize,// Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)

                         double sigmaX,// x 方向标准方差

                          double  sigmaY =0,// y 方向标准方差

                           int borderType = BORDER_DEFAULT)

(3)中值平滑函数(中值滤波器)(medianBlur)(中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替。)

medianBlur(InputArray src,// 输入图像

                    OutputArray dst,// 输出图像

                     int ksize)// 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。

代码实现

全局变量

Mat src;

Mat dst;

int MAX_KERNEL_LENGTH = 20;

点击btn实现不同效果的转换(按钮是通过storyboard创建的,通过tag值来区分)

- (IBAction)changeType:(id)sender {

UIButton *btn = (UIButton *)sender;

switch (btn.tag) {

case 1000:// 展示原图

{

self.secondImageView.image = MatToUIImage(src);

}

break;

case 1001:// 均值

{

for (int i = 1; i < MAX_KERNEL_LENGTH; i+=2) {

blur(src, dst, cv::Size(i,i));

}

self.secondImageView.image = MatToUIImage(dst);

}

break;

case 1002:// 高斯模糊

{

for (int i = 1; i < MAX_KERNEL_LENGTH; i+=2) {

GaussianBlur(src, dst, cv::Size(i,i),0);

}

self.secondImageView.image = MatToUIImage(dst);

}

break;

case 1003:// 中值

{

for (int i = 1; i < MAX_KERNEL_LENGTH; i+=2) {

medianBlur(src, dst, i);

}

self.secondImageView.image = MatToUIImage(dst);

}

break;

default:

break;

}

}

效果

原图

模糊效果(其中一种)

参考资料

转载地址:http://qrzia.baihongyu.com/

你可能感兴趣的文章
java基础语法
查看>>
浅谈《Linux就该这么学》
查看>>
DOM不同的结点类型
查看>>
深入理解Java虚拟机,gc输出参数
查看>>
Windows内存管理介绍
查看>>
组合继承
查看>>
拖拽对话框
查看>>
DOORS的引用类型
查看>>
Jmeter压力测试环境准备
查看>>
codeforces 982 c
查看>>
MySQL初识与安装
查看>>
安卓 权限 规则
查看>>
HashMap的实现原理 HashMap底层实现,hashCode如何对应bucket?
查看>>
Deployed component GUIs and figures have different look and feel than MATLAB desktop
查看>>
自定义UISlider
查看>>
构建方法
查看>>
“.NET研究”构建高性能ASP.NET站点之优化HTTP请求
查看>>
攻击法国海军病毒Conficker在中国网络同步蔓延
查看>>
软件测试——Junit的使用
查看>>
py10-函数-可变长参数
查看>>