平滑处理 - cvSmooth 函数实现

前言

  平滑是图像处理中很重要的操作,其主要用途是降噪。Open CV
提供了 5 种不同的平滑方法:简单模糊,简单无缩放变换的模糊,中值模糊,高斯模糊和双边滤波,它们都通过函数
cvSmooth 实现。

  关于几种平滑的具体实现步骤及相关基础知识,本文不做讲解( 网上很多相关资料
),仅就调用封装好了的平滑函数进行介绍,且仅具体介绍简单平滑处理,其它的平滑方式类似。

平滑函数
cvSmooth

  函数原型:


1 void cvSmooth (
2 const CvArr *src,
3 CvArr * dst,

4 int smoothtype = CV_GAUSSIAN,
5 int param1 = 3,
6 int param2 = 0,
7 int param3 = 0,
8 int param4 = 0
9 );

  下面结合几种具体的平滑操作进行演示,不论何种平滑,第一个参数都是目标处理图像,第二个参数是处理后的图像,不同的平滑方法后面的几个参数的设定规则不同。

简单模糊

  smoothtype 类型设定为 CV_BLUR,param1 和 param2 为均值求解领域的范围( 核
)大小,后两个参数用不上。下面的程序对图像实现核为 3x3 的均值平滑:


 1 // 此头文件包含图像IO函数的声明
2 #include "highgui.h"
3 // 此头文件包含基本的图像处理函数和高级计算机视觉算法
4 #include "cv.h"
5
6 int main (void) {
7
8 // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
9 IplImage * img = cvLoadImage ("D:\\1.jpg");
10
11 // 创建一个窗口显示平滑处理前的图像
12 cvNamedWindow ("平滑前", CV_WINDOW_AUTOSIZE);
13
14 // 将图像装载进窗口并显示此窗口
15 cvShowImage ("平滑前", img);
16
17 // 创建一个新的图像内存块,以存放平滑结果。
18 IplImage * out = cvCreateImage (
19 cvGetSize (img),
20 img->depth,
21 img->nChannels
22 );
23
24 // 平滑处理函数。
25 cvSmooth (
26 img, // 待处理图像
27 out, // 处理后图像
28 CV_GAUSSIAN, // 平滑类型
29 3, // 核大小( 行 )
30 3 // 核大小( 列 )
31 );
32
33 // 创建一个窗口显示平滑处理后的图像
34 cvNamedWindow ("平滑后", CV_WINDOW_AUTOSIZE);
35
36 // 将图像装载进窗口并显示此窗口
37 cvShowImage ("平滑后", out);
38
39 // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
40 // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
41 cvWaitKey (0);
42
43 // 释放图像内存块
44 cvReleaseImage (&img);
45 cvReleaseImage (&out);
46
47 // 关闭窗口同时释放窗口内存块
48 cvDestroyWindow ("平滑前");
49 cvDestroyWindow ("平滑后");
50
51 return 0;
52 }

  运行程序: 

  

其它模糊

  当 cvSmooth 的 smoothtype 字段为其它值时,将进行不同类型的平滑处理,而 param1-4
则根据模糊方式的不同赋予不同实参。具体调用规范请参阅相关资料。

说明

  平滑对目标处理图像,结果图像的格式以及是否支持 in place 等都有相关规定,具体使用时请参阅函数手册。

时间: 2024-10-03 00:07:17

平滑处理 - cvSmooth 函数实现的相关文章

OpenCV学习 5:关于平滑滤波器 cvSmooth()函数

原创文章,欢迎转载,转载请注明出处 本节主要了解下cvSmooth函数的一些参数对结果的影响.从opencv tutorial中可以看到这样一段话: 像我这样的数学渣,还是看下图来得形象: 高斯滤波器的说明如下: 反正看得我晕,我只知道一点,高斯滤波对于去除服从正态分布的噪声很有效.看来学好数学还是很重要...还有英语....英语渣一个.. 平滑方法使用 CV_GAUSSIAN,平滑窗口一次为3*3,5*5,9*9和11*11.下面直接看效果.1:原图 2:核为3*3 3:核为5*5 4:9*9

【练习5.1】使用cvSmooth测试不同平滑处理方法的效果以及不同的平滑窗口对处理效果的影响

<学习OpenCV>中文版第5章第1题 提纲 题目要求 a程序代码 b程序代码 c程序代码 结果图片 题目要求: 注:相对书中的要求有扩充.调整 载入一个带有有趣纹理的图像. a.使用cvSmooth函数以多种方法平滑图像 b.使用对称的平滑窗口,大小依次为3×3.5×5.9×9和11×11,并显示出结果 c.用5×5高斯滤波器平滑图像两次和用两个11×11平滑器平滑一次的输出结果是接近相同的吗?为什么? d.对比不同平滑方法的处理效果,并查阅资料,找出处理效果的不同及各自的优势 a程序代码:

八.使用OpenCv对图像进行平滑操作

1.cvSmooth函数 函数 cvSmooth 可使用简单模糊.简单无缩放变换的模糊.中值模糊.高斯模糊.双边滤波的任何一种方法平滑图像.每一种方法都有自己的特点以及局限. 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSoble和cvaplace相似)和32位浮点数到32位浮点数的变换格式. 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像.这两种方法可以(in-place)方式处理图像. 中值和双向滤波工作于 1- 或 3-通道, 8

几个重要的函数opencv

1.CvCapture结构体: CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型(如int,char等)只是存放的内容不一样,在OpenCv中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复. 如CvCapture* pCapture = NULL; 2.cvCreateFileCapture(const char* mov) cvCreateFileCapture()通

OpenCV对图像做简单处理——平滑滤波

首先必须知道几个关键函数--cvLoadImage,cvCreateImage和cvSmooth. 一.主要函数的简单介绍 1.1 cvLoadImage 函数功能:把图片加载到内存中 函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR ); 函数说明: filename :要被读入的文件的文件名(包括后缀): flags :指定读入图像的颜色和深度: 指定的颜色可以将输入的图片转为3通道

腾讯云无服务器云函数架构精解

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 分享人:陈杰,腾讯云架构平台部技术专家,10年云计算经验,现供职于腾讯架构平台部,负责弹性计算及云函数技术研发,致力于提供领先的基础设施平台以提升资源利用率及优化提升程序员开发运维效率. 继虚拟机,容器技术,无服务器化成为新的行业热点,无服务器云函数可以让用户无需关心服务器的部署运营,只需开发最核心的业务逻辑,即可实现上线运营,具备分布容灾能力,可依据负载自动扩缩容,按照实际调用次数与时长计费.本次主要分享腾讯云无服务器云函数在技术实

日常之学习CSS3变形和js函数指针

1,transform变形属性,包括rotate(xxdeg)旋转,translate(x轴px,y轴px)移动,scale(0.5,2)变形(x轴缩小0.5倍,y轴放大2倍),skew(x轴deg,y轴deg)拉伸, 拉伸透视图: 2,transtion过渡属性,保证变形平滑进行. 函数指针: function fun(){ return 5}var a=funvar b=fun() JS中我们把以上代码加粗的部分叫做函数,函数是一种叫做function引用类型的实例,因此函数是一个对象.对象

Mathf函数说明

Mathf结构:常用数学函数的集合.类变量◆ static var Deg2Rad:float描述:度到弧度的转化常量(只读).这个等于(PI*2)/360.//转化30度为弧度var deg=30.0;var od=dcg*Mathf.Deg2Rad;参见:Rad2Deg常量.◆ static varEpsilon:float描述:一个小的浮点数值(只读)比较小于它的值没有多人意见,因为浮点数是不精确的.print(MathfEpsilon);◆ static var Infinity:flo

海量多边形矢量并行平滑实现

最近工作需要对提取的矢量图斑进行平滑(shp格式),所以就对这里进行了一点小小的研究,主要是对Chaikin-curve算法进行改进,其实还有很多优秀的算法可以拿来用,迫于时间,就没有继续深入, 这篇博客,权当是抛砖引玉,希望真正搞平滑算法的”同志们“,能够展示出自己真正的优秀算法.我们知道,当多边形数量为几百个,几千个,可能cpu串行和并行计算效率差距不大,但是当数量突破万个,几十万个,几百万个呢? 串行明显就不行了,所以我这里探索了并行矢量平滑算法...我在后面开源了代码,如果各位对代码有疑