大清早的我们就来做一个简单有趣的图像处理算法实现,作为对图像处理算法学习的开端吧。之所以有趣就在于笔者把算法处理的各个方式的处理效果拿出来做了对比,给你看到原图和各种处理后的图像你是否能够知道那幅图对应那种算法模式呢?嘻嘻,拭目以待吧

平滑的意义:

图像平滑image smoothing:压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。

图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑常用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。

实现功能:

自动对工程项目目录下的图片lena.jpg进行平滑处理:采用五种平滑算法,分别显示在五个窗口中方便对比查看效果和各自特点。

函数精析:

  • cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, doubleparam4=0)

  • src输入图像,dst输出图像,smoothtype平滑方式,param四个参数
  • smoothtype五种:CV_BLUR_NO_SCALE(0),CV_BLUR(1), CV_GAUSSIAN(2) ,CV_MEDIAN (3) ,CV_BILATERAL(4)
  • CV_BLUR_NO_SCALE(0):无缩放比例的线性卷积,利用参1*参2的结构元进行卷积,仅支持单通道图像
  • CV_BLUR(1):先线性卷积后缩放,缩放比例为1/(参1*参2)
  • CV_GAUSSIAN(2) :利用参1*参2的高斯结构元进行高斯滤波
  • CV_MEDIAN (3):利用参1*参2的方形结构元进行中值滤波
  • CV_BILATERAL(4):利用参1*参2的方形结构元进行双边滤波
  • 最有意思的是该函数现在已经显得无力了,完全可以被GaussianBlur(), blur(), medianBlur(),obilateralFilter()取代,从图像平滑效果也可以看出。笔者在这里是开篇从基础引入,算是抛自己的砖啦
  • 附源代码:

#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
void main()
{
IplImage* pImg = cvLoadImage("lena.jpg",); cvNamedWindow("Example4-in");
cvNamedWindow("Example4-out-GAUSSIAN");
cvNamedWindow("Example4-out-CV_BLUR_NO_SCALE");
cvNamedWindow("Example4-out-CV_BLUR");
cvNamedWindow("Example4-out-CV_MEDIAN");
cvNamedWindow("Example4-out-CV_BILATERAL");
cvShowImage("Example4-in",pImg); /* 分配各个图像的结构空间用来存储平滑后的图像 */
IplImage* out1 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,);
IplImage* out2 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,);
IplImage* out3 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,);
IplImage* out4 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,);
IplImage* out5 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,); cvSmooth(pImg,out1,CV_GAUSSIAN,,); //平滑处理
cvSmooth(pImg,out2,CV_BLUR_NO_SCALE,,);
cvSmooth(pImg,out3,CV_BLUR,,);
cvSmooth(pImg,out4,CV_MEDIAN,,);
cvSmooth(pImg,out5,CV_BILATERAL,,); cvShowImage("Example4-out-GAUSSIAN",out1);
cvShowImage("Example4-out-CV_BLUR_NO_SCALE",out2);
cvShowImage("Example4-out-CV_BLUR",out3);
cvShowImage("Example4-out-CV_MEDIAN",out4);
cvShowImage("Example4-out-CV_BILATERAL",out5);
cvWaitKey();
cvReleaseImage(&out1);
cvReleaseImage(&out2);
cvReleaseImage(&out3);
cvReleaseImage(&out4);
cvReleaseImage(&out5); cvWaitKey();
cvDestroyWindow("Example4-in");
cvDestroyWindow("Example4-out-GAUSSIAN");
cvDestroyWindow("Example4-out-CV_BLUR_NO_SCALE");
cvDestroyWindow("Example4-out-CV_MEDIAN");
cvDestroyWindow("Example4-out-CV_BILATERAL");
cvDestroyWindow("Example4-out-CV_BLUR");
}

平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三的更多相关文章

  1. Canny边缘检测及图像缩放之图像处理算法-OpenCV应用学习笔记四

    在边缘检测算法中Canny颇为经典,我们就来做一下测试,并且顺便实现图像的尺寸放缩. 实现功能: 直接执行程序得到结果如下:将载入图像显示在窗口in内,同时进行图像两次缩小一半操作将结果显示到i1,i ...

  2. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  3. OpenCV图像处理学习笔记-Day1

    OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...

  4. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  5. OpenCV图像处理学习笔记-Day03

    OpenCV图像处理学习笔记-Day03 目录 OpenCV图像处理学习笔记-Day03 第31课:Canny边缘检测原理 第32课:Canny函数及使用 第33课:图像金字塔-理论基础 第34课:p ...

  6. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  7. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  8. OpenCV图像处理学习笔记-Day4(完结)

    OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...

  9. 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二

    今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...

随机推荐

  1. deeplab hole algorithm

    最近看了几篇文章,其中均用到了hole algorithm. 最早用的就是deeplab的文章了,Semantic Image Segmentation with Deep Convolutional ...

  2. 第一章 删掉centos原有的openjdk并安装sun jdk

    一.卸载原有openjdk rpm -qa | grep java 之后,将展示出来的全部卸载掉,我这里是5个 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111 ...

  3. ueditor不自动加P解决方法

    百度的Ueditor编辑器出于安全考虑; 用户在html模式下粘贴进去的html文档会自动被去除样式和转义. 虽然安全的,但是非常不方便. 做一下修改把这个功能去掉. 一.打开ueditor.all. ...

  4. Ubuntu15下mysql5.6.25解决不支持中文的办法

    apt-get install 安装的,不是源码包安装的mysql 1 修改mysql的配置文件 /etc/mysql/conf.d/mysql.cnf 在[mysql]的下方加入如下语句:(注:这个 ...

  5. HTML超标记语言

     Html超文本标记语言,负责描绘Web世界的骨架. 〇.工具 http;//www.w3cchool.com.cn 一.Tim Bemers Lee 万维网之父: Html设计者: W3C创始人: ...

  6. Jfinal连接SQLSERVER相关配置说明

    driver=net.sourceforge.jtds.jdbc.Driver jdbcUrl = jdbc:sqlserver://localhost:1433;DatabaseName=test ...

  7. 多层嵌套ajax同步

    方式一: $.ajax({ type : "post", url : "user/add", data : data, async : false, //必须为 ...

  8. Hibernate+jsp+struts+spring做增删该查,

    同样还是web项目,这里只做了一张表,做一个测试,例子.主要是建Hibernate 的时候要非常注意,有时间了整理一下建Hiberbnate 的时候需要注意的事项 这里我是建了5个包,其实只要四个就好 ...

  9. Microsoft.Office.Interop.Word.Document.Open returns null on Windows Server 2008 R2

    系统终于通过UAT,可以上线了.一遍测下来还行,可是为什么word转PDF就是不行呢?查了一下log,原来在wordApp.Documents.Open来打开生产的word文件的时候,返回一直是空.之 ...

  10. MVC 单元测试

    1.新建mvc项目 添加controller 添加action 或者方法 public ActionResult Index(string str) { ViewBag.Teststr = str; ...