zoukankan      html  css  js  c++  java
  • 平滑处理

    前言

      平滑是图像处理中很重要的操作,其主要用途是降噪。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 等都有相关规定,具体使用时请参阅函数手册。

  • 相关阅读:
    NetBeans 时事通讯(刊号 # 147 May 18, 2011)
    NetBeans 时事通讯(刊号 # 146 May 13, 2011)
    准备入职支付宝
    NetBeans 时事通讯(刊号 # 145 May 05, 2011)
    GAE 博客——B3log Solo 0.2.6 正式版发布了!
    用C语言实现一个简单的HTTP客户端(HTTP Client)
    Grack Ruby/Rack Git SmartHTTP Server Handler
    Cpy
    pyhttp 用Python演示Web服务器/客户端对HTTP协议的解析
    用C语法来写Python代码
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3744784.html
Copyright © 2011-2022 走看看