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

平滑的意义:

图像平滑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. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context ...

  2. asp.net mvc 自定义身份验证

    1.定义身份实体对象 /// <summary> /// 网站用户实体对象 /// </summary> public class DDTPrincipal : IPrinci ...

  3. sublime插件 cssComb实现css自动排序及格式化

    cssComb是一个实现css代码自动排序,当然顺便也实现了代码的格式化 安装: 首先需要打开sublime搜索安装csscomb插件(前提是已经安装了sublime的package control) ...

  4. android webview开发问题及优化汇总

    我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...

  5. win2008 IIS与php整合

    首先安装好IIS 安装的时候 要注意三个地方打得勾 注:   CGI  会在IIS+PHP的环境中用到 php.ini default_socket_timeout = 60extension_dir ...

  6. CentOS6系统openssl生成证书和自签证书

    CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit.$ yum install openssl openssl-devel 1,生成服务器端的私钥 ...

  7. AIX 查看当前目录内最大的10个目录

       du  | sort -r n| head -n10 du  查看目录大小: srot  排序,-r 选择倒序,-n选项 看作数值排序(否则将作为字符排序): herd   -n10  查看开通 ...

  8. C++写一个带参数运行的程序

    #include <string.h>#include <iostream>#include <cstdlib>using namespace std; int m ...

  9. 1075 PAT Judge (25)

    排序题 #include <stdio.h> #include <string.h> #include <iostream> #include <algori ...

  10. android sdk镜像站点

    http://android-mirror.bugly.qq.com:8080/include/usage.html Windows A. 打开Android SDK Manager  B. 设置代理 ...