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

平滑的意义:

图像平滑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. js的form基础知识点

    在HTML 中,表单是由<form>元素来表示的,而在JavaScript 中,表单对应的则是HTMLForm-Element 类型.HTMLFormElement 继承了HTMLElem ...

  2. js 两数相减

    var SecondPrice = document.getElementById("txtSecondPrice");  //秒杀价            var MarketP ...

  3. spring-data-redis注册fastjson序列化工具

    使用spring-data-redis的时候,其序列化工具自带:

  4. [问题记录.VisualStudio]VS2013无法新增和打开项目

    [问题描述] 1) 打开项目失败,报“项目文件只读”或“空引用”错误. 2) 无法新建项目,没有任何可用模板. 3) TFS都正常 [问题产生] 机器环境: 1) 装的Win10双系统,其中一个系统是 ...

  5. javascript json转为 go struct 小工具代码

    /** * Created by cdpmac on 15/10/20. */ var topname="Ap"; var jdata={ "item": { ...

  6. c# long转 datetime

    ; DateTime start = , , , , , , DateTimeKind.Utc); DateTime date = start.AddMilliseconds(time).ToLoca ...

  7. CSS自动换行

    style="word-break:break-all;word-wrap:break-word;"

  8. 记一次PHP7+opcache+zmq出现SIGSEGV 问题的查找(一次不成功的bug查找)

    Title:  记一次PHP7+opcache+zmq出现SEGSEGV问题的查找(一次不成功的bug查找) bug来历自述:线上代码PHP环境是5.2,为了提升性能(逼格),于是升级为PHP7并使用 ...

  9. Linux服务器上安装织梦CMS

    安装篇 第一步:配置防火墙(默认情况下,端口80和3306是拒绝访问的,在防火墙上进行配置): vi /etc/sysconfig/iptables(在"COMMIT"的上一行加上 ...

  10. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...