我的OpenCV学习笔记(2):opencv中的模糊算法
来源:互联网 发布:杭州知乎电子有限公司 编辑:程序博客网 时间:2024/06/06 03:27
模糊算法在图像处理时的使用再平常不过,有必要彻底的了解OpenCV中自带的所有模糊算法。
OpenCV中自带了4种模糊算法:
- blur(均值模糊)
- GaussianBlur(高斯模糊)
- medianBlur(中值模糊)
- bilateralFilter(双边滤波)
原理上都是简单的,前3种算法分别使用了均值模型、高斯模型、中值模型进行滤波,非常直观易懂。
最后一种双边滤波值得拿出来讨论,双边滤波可以说是效果最好的模糊算法,相对于传统的高斯滤波,双边滤波的一个重要特点就是能够保持物体的边缘。它们之间最直观的区别就是:高斯模糊之后感觉整个照片都是模糊的,而双边滤波之后整体的区域信息还是清晰,眼是眼鼻子是鼻子。
双边滤波的原理与其它的模糊算法有些不同:
其它的模糊算法中目标点上的像素值通常是由其所在位置上的周围的一个小局部邻居像素的值所决定;
而双边滤波中权重因子是利用两个像素之间的空间距离(在图像中为2D)关系来生成。
高斯滤波在低通滤波算法中有不错的表现,但是其却有另外一个问题,那就是只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。这里的边缘主要是指图像中主要的不同颜色区域(比如蓝色的天空,黑色的头发等),而Bilateral就是在Gaussian blur中加入了另外的一个权重分部来解决这一问题。
下面简要、直观的用代码来看看各种模糊算法的效果吧:
- int main() {
- Mat src = imread("/home/chuanqi/ImageDataset/wy.jpg");
- Mat dst1, dst2, dst3, dst4;
- for (int i = 1; i < 20; i+=2) {
- cout << "Kernel size: " << i << endl;
- blur(src, dst1, Size(i, i));
- GaussianBlur(src, dst2, Size(i, i), 0, 0);
- medianBlur(src, dst3, i);
- bilateralFilter(src, dst4, i, 2*i, i/2);
- imshow("src", src);
- imshow("blur", dst1);
- imshow("GaussianBlur", dst2);
- imshow("medianBlur", dst3);
- imshow("bilateralFilter", dst4);
- waitKey();
- }
- return 0;
- }
0 0
- 我的OpenCV学习笔记(2):opencv中的模糊算法
- 我的OpenCV学习笔记(24):详细讨论OpenCV中的数据结构
- OpenCv学习笔记(二):图像模糊
- OpenCV(学习笔记4)-图像模糊
- 我的opencv学习笔记
- 我的OpenCV学习笔记(一):OpneCV中的数据共享机制
- 我的OPENCV学习笔记-图像混合
- openCV学习笔记-模糊图像之blur
- 我的OpenCV学习笔记(二):操作每个像素
- 我的OpenCV学习笔记(七):绘图操作
- 我的OpenCV学习笔记(11):启动摄像头
- 我的OpenCV学习笔记(12):VideoCapture类
- 我的OpenCV学习笔记(七):绘图操作
- 我的OpenCV学习笔记(12):VideoCapture类
- 我的OpenCV学习笔记(11):启动摄像头
- 我的OpenCV学习笔记(11):启动摄像头
- 我的OpenCV学习笔记(11):启动摄像头
- 我的OpenCV学习笔记(12):VideoCapture类
- 我的OpenCV学习笔记(1):空域滤波之中值滤波
- 在 Web 项目中应用 Apache Shiro
- sqlmap
- c++ STL 基础使用
- spring mvc 框架搭建
- 我的OpenCV学习笔记(2):opencv中的模糊算法
- php json_decode 转换为空的解决方案一
- ORA-12737: Instant Client Light: unsupported server character set %s
- linux 学习笔记
- Workflow常见错误如何解决
- 【DB.PL/SQL】程序流程控制 —— 异常处理
- 【移动开发】Service类onStartCommand()返回值和参数
- 关注CSDN社区微信,更多精彩等你来
- cocos2d 坐标系使用