前言
平滑是图像处理中很重要的操作,其主要用途是降噪。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