平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三

大清早的我们就来做一个简单有趣的图像处理算法实现,作为对图像处理算法学习的开端吧。之所以有趣就在于笔者把算法处理的各个方式的处理效果拿出来做了对比,给你看到原图和各种处理后的图像你是否能够知道那幅图对应那种算法模式呢?嘻嘻,拭目以待吧
平滑的意义:
图像平滑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应用学习笔记三的更多相关文章
- Canny边缘检测及图像缩放之图像处理算法-OpenCV应用学习笔记四
在边缘检测算法中Canny颇为经典,我们就来做一下测试,并且顺便实现图像的尺寸放缩. 实现功能: 直接执行程序得到结果如下:将载入图像显示在窗口in内,同时进行图像两次缩小一半操作将结果显示到i1,i ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- OpenCV图像处理学习笔记-Day1
OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- OpenCV图像处理学习笔记-Day03
OpenCV图像处理学习笔记-Day03 目录 OpenCV图像处理学习笔记-Day03 第31课:Canny边缘检测原理 第32课:Canny函数及使用 第33课:图像金字塔-理论基础 第34课:p ...
- 牛客网《BAT面试算法精品课》学习笔记
目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- OpenCV图像处理学习笔记-Day4(完结)
OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...
- 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二
今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...
随机推荐
- 谷歌Cartographer学习(1)-快速安装测试
谷歌自己提供了安装方法,但是安装比较繁琐,我做了一定的修改,代码放到个人github上,https://github.com/hitcm/. ros下面的安装非常快捷,只需要catkin_make即可 ...
- iis7下配置php出现404.17错误的解决办法
服务器上建有几个PHP站点,都在正常运行.今天又新建了一个PHP站点,处理程序模块配置的和其他几个都一样,但就是跑不起来,一直提示404.17错误,重启服务器也不行. 最后实在没办法了,就把正常运行站 ...
- MyEclipse +Flex 整合
最近想利用red5开发一个流媒体的程序,在网上找了半天没有一个可用的代码,要么是下载需要多少币,要么是没有.纠结了半天,最后决定自检看着文字版本的教程,自己编写一个. 看着一 ...
- python 类变量 在多线程下的共享与释放问题
最近被多线程给坑了下,没意识到类变量在多线程下是共享的,还有一个就是没意识到 内存释放问题,导致越累越大 1.python 类变量 在多线程情况 下的 是共享的 2.python 类变量 在多线程情况 ...
- 5ucms后台调用标签
<%=Rs.Data(1,i)%>栏目 <%=Rs.Data(2,i)%>标题 <%=Rs.Data(3,i)%>推荐 <%=Rs.Data(4,i)%> ...
- 为什么不能访问django自带的索引页
通过HTTP://192.168.160.128:8000访问虚拟机上的django索引页出现“ 无法访问此网站 192.168.160.128 拒绝了我们的连接请求. ” 是什么原因呢?费了好大一番 ...
- .Net MVC+bootstrap Table学习
一.效果展示 二.使用方法 1).相关css和js的引用 <link href="~/Themes/Bootstrap/css/bootstrap.css" rel=&quo ...
- JS的函数
函数由四部分组成 function+function name+parameter+body 方法调用模式 Object.add(); 函数调用模式: add(3,4) 构造器调用模式:JS是基于原型 ...
- serialize data use msgpack
#ifndef _BYTEBUFFER_H #define _BYTEBUFFER_H #include <msgpack.hpp> typedef unsigned char uint8 ...
- 子进程 已安装 pre-removal 脚本 返回了错误号 1或2 与 子进程 已安装 post-installation 脚本 返回了错误号 1或2
今天在ubuntu kylin上安装了virtualbox, 后来我想删除了再装个新一点的,结果正常的情况下删除不了,我就把找到的virtualbox的目录全部都删除了, 再通过apt-get rem ...