zoukankan      html  css  js  c++  java
  • opencv学习(3)——高斯平滑图像

     1 #include "stdafx.h"
     2 #include "highgui.h"
     3 #include "cv.h"
     4 #include <fstream>
     5 #include <iostream> 
     6 using namespace std;
     7 void example2_4( IplImage* image )
     8 {
     9     cvNamedWindow( "Example2_4-in", CV_WINDOW_AUTOSIZE );
    10     cvNamedWindow( "Example2_4-out", CV_WINDOW_AUTOSIZE );
    11     cvShowImage( "Example2_4-in", image );
    12     IplImage* out = cvCreateImage(
    13         cvGetSize(image),
    14         IPL_DEPTH_8U,
    15         3
    16     );
    17     cvSmooth( image, out, CV_GAUSSIAN, 5,5 );
    18     cvSmooth( out, out, CV_GAUSSIAN, 5, 5);
    19     cvShowImage( "Example2_4-out", out );
    20     cvReleaseImage( &out );
    21     cvWaitKey( 0 ); 
    22     cvDestroyWindow("Example2_4-in" );
    23     cvDestroyWindow("Example2_4-out" );
    24     
    25 }
    26 
    27 int main( int argc, char** argv )
    28 {
    29   IplImage* img = cvLoadImage("Lena.jpg" );
    30   cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE );
    31   cvShowImage("Example1", img );
    32   example2_4( img );
    33   cvReleaseImage( &img );
    34   cvDestroyWindow("Example1");
    35 }

    cvSmooth函数用法

    定义原型

    void cvSmooth(

    const CvArr* src,

    CvArr* dst,

    int smoothtype=CV_GAUSSIAN, 

    int param1,

    int param2,

    double param3,

    double param4 );

     

    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 的中值滤波 (邻域是方的)。                           

                                        CV_BILATERAL(双向滤波) - -应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2.。

     

    param1 平滑操作的第一个参数.

     

    param2 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值为零,则表示其被设定为param1。

     

    param3 对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小由sigma 计算 (以保证足够精确的操作).

      

     

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

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/happycaoyue/p/3000848.html
Copyright © 2011-2022 走看看