• 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 方式处理图像.

  • 相关阅读:
    ArcSDE安装报 “contains an incorrect path”
    vs对话框"发生生成错误,是否继续并运行上次的成功生成"的设置
    修改XML节点名称
    git 常用
    mysql 执行sql流程
    DocumentBuilderFactory.newInstance() 异常解决
    samba 配置
    ajax jquery
    c++ map
    javacc jjtree 写法 以及 jj写法 基本语法 以及应用
  • 原文地址:https://www.cnblogs.com/happycaoyue/p/3000848.html
Copyright © 2020-2023  润新知