OpenCV入门:简单图像处理实例——平滑滤波

本文简单举一个图像平滑滤波的例子,以此认识OpenCV为我们提供的强大图像处理功能。代码如下:

//
//  main.cpp
//  Smooth_Filter
//
//  Created by 黄露 on 16/3/21.
//  Copyright  2016年 huanglu_thu13. All rights reserved.
//

#include "cv.h"
#include "highgui.h"

int main(int argc, const char * argv[]) {
    //创建两个窗口显示处理前后的图片
    cvNamedWindow("Imgae Before Processing");
    cvNamedWindow("Image After Processing");
    //创建图像指针,加载图像至内存
    IplImage * in = cvLoadImage("/Users/huanglu/Pictures/thusada.jpg",1);
    //创建一个图像来存储处理后的图片
    IplImage * out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 3);
    //做平滑滤波,用3×3的模板
    cvSmooth(in, out, CV_GAUSSIAN, 3, 3);
    //显示处理前后的图片
    cvShowImage("Imgae Before Processing", in);
    cvShowImage("Imgae After Processing", out);
    //释放图像指针
    cvReleaseImage(&in);
    cvReleaseImage(&out);
    //等待用户输入任意键结束
    cvWaitKey();
    //释放两个窗口
    cvDestroyWindow("Imgae Before Processing");
    cvDestroyWindow("Imgae After Processing");
    return 0;
}

代码中前面一部分已经没什么需要解释的,主要需要解释以下2个函数。

1、cvCreateImage用来创建首地址并分配存储空间,其原型为:

IplImage* cvCreateImage( CvSize size, int depth, int channels );

三个参数依次是图像大小、图像元素的位深度和图像的通道数。这里我们使用cvGetSize获取图像大小,IPL_DEPTH_8U 表示无符号8位整型,即uint8,本次图像为彩色三通道。

2、cvSmooth可使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像。其声明为:

void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ,double param4=0);

其中src表示输入图像,dst表示输出图像,smoothtype表示平滑方法,包括:

        CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。

        CV_BLUR (simple blur) - 对每个象素param1×param2邻域 求和并做尺度变换 1/(param1.param2)。

        CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积。        

        CV_MEDIAN (median blur) - 对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的)。

        CV_BILATERAL (双向滤波) - 应用核大小为param1×param1的滤波,彩色sigma=param3,空间 sigma=param4。

以下是测试的结果:

时间: 2024-07-30 16:04:47

OpenCV入门:简单图像处理实例——平滑滤波的相关文章

测试-杭电c入门简单问题 求指导一下

问题描述 杭电c入门简单问题 求指导一下 题目如下输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. Input输入数据有多组,每组占一行,每行的第一个数字为n接着是n个整数,n=0表示输入数据的结束,不做处理. Output对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开.每个测试实例占一行. Sample Input3 3 -4 24 0 1 2 -30 Sample Output-4 3 2-3 2 1 0 Aut

ajax 入门检测用户名实例与实现方法(1/2)

ajax 入门检测用户名实例与实现方法 <form action="#" method="post" name="iform"> <p><label for=nickname>用户名:</label><input id=nickname name=nickname placeholder="在这里输入用户名"><span id=tips教程></sp

【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

<h1 style="margin: 0px; padding: 0px;"> <span style="font-family: "Microsoft YaHei"; font-size: 32px; color: rgb(204, 153, 51); font-weight: normal;">1.下载和安装OpenCV SDK</span> </h1> <div> <span

用html5实现的简单幻灯片实例

 用html5.css3实现的超简单幻灯片,用鼠标滚轮滚动进行换页.   <!doctype html> <html> <head> <title></title> <style> #slides{ position:absolute; left:0px; top:0px; height:100%; width:100%; overflow:hidden; } .slide{ position:absolute; height:600

PHP中的traits简单使用实例

  这篇文章主要介绍了PHP中的traits简单使用实例,本文着重讲解traits的语法.traits有什么作用.什么情况下使用traits,需要的朋友可以参考下 PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西. Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: ? 1 2 3 4 5 6 7 8 9 10 11

PHP SPL标准库之数据结构堆(SplHeap)简单使用实例

  这篇文章主要介绍了PHP SPL标准库之数据结构堆(SplHeap)简单使用实例,本文还同时讲解了最大堆(SplMaxHeap).最小堆(SplMinHeap)的相关知识,需要的朋友可以参考下 堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现.根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆.二叉堆还常用于排序(堆排序). 如下:最小堆(任意节点的优先级不小于它的子节点) 看看PHP SplHeap的实现: 显然它是一个抽象类,

PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

  这篇文章主要介绍了PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例,需要的朋友可以参考下 队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO). PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现. SplQueue类摘要如下: SplQueue简单使用如下: 代码如下: $queue = new SplQueue(); /** * 可见

Python psutil模块简单使用实例

  这篇文章主要介绍了Python psutil模块简单使用实例,本文直接给出使用脚本,实现查看cpu的信息.查看内存信息.查看系统启动时间.查看网卡信息等,需要的朋友可以参考下 安装很简单 代码如下: pip install psutil 官网地址为: https://pythonhosted.org/psutil/ (文档上有详细的api) github地址为: https://github.com/giampaolo/psutil/ psutil比较好的地方,一个是跨平台,不需要切换平台的

一个fprintf的简单封装实例(vsprintf,va_start(),+va_arg(),+va_end()可变参数列表)

对于不方便进行调试的程序,最好的方法,就是将调试信息写入文件了. 下面是一个简单的实例,仅供参考. 程序代码: #include <string.h> #include <stdio.h> #include <stdarg.h> #ifndef DEBUG #define DEBUG #endif int LOG2F(const char *format,...) { int ret = 0; #ifdef DEBUG FILE* fp = NULL; fp=fopen