4基于opencv的线性领域滤波(方框_均值_高斯滤波)

来源:互联网 发布:小学生网络教学 编辑:程序博客网 时间:2024/06/05 14:20

线性领域滤波:方框滤波,均值滤波,高斯滤波

一、方框滤波函数boxFilter

1.1示例

MatScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

MatOutImage;

boxFilter(ScrImgaeCopy1, OutImage, -1, Size(5, 5));

1.2 boxFilter ()函数各个参数详解

Ø  ScrImgaeCopy1:输入图像

Ø  OutImage:输出图像

Ø  -1:输出图像的深度,-1代表输出源图像,即src.depth()

Ø  Size(5, 5):内核大小。Size(3,3)就表示3x3的核大小。

 

二、均值滤波函数Blur

2.1示例

MatScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

MatOutImage1;

blur(ScrImage, OutImage1, Size(5, 5));

2.2 blur()函数各个参数详解

Ø  ScrImage:输入图像

Ø  OutImage1:输出图像

Ø  Size(5, 5):内核大小。Size(3,3)就表示3x3的核大小。

 

三、高斯滤波GaussianBlur

3.1示例

MatScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

MatOutImage2;

GaussianBlur(ScrImage, OutImage2, Size(5, 5), 0,0);

3.2 GaussianBlur()函数各个参数详解

Ø  ScrImage:输入图像

Ø  OutImage2:输出图像

Ø  Size(5, 5):内核大小。Size(3,3)就表示3x3的核大小。

0:第四个参数,double类型的sigmaX,表示高斯核函数在X方向的的标准偏差。

0:第五个参数,double类型的sigmaY,表示高斯核函数在Y方向的的标准偏差。

 

四、完整程序

#include <opencv2/core/core.hpp> 

#include <opencv2/imgproc/imgproc.hpp> 

#include <opencv2/opencv.hpp> 

 

#include <vector> 

#include <cstdio> 

 

using namespacestd;

using namespacecv;

 

Mat g_ScrImage, g_ScrImageboxFilter, g_ScrImageBlur,g_ScrImageGaussianBlur;

static voidon_boxFilter(int,void*);

static voidon_Blur(int,void*);

static voidon_GaussianBlur(int,void*);

 

intboxFiltervalue;

intBlurvalue;

intGaussianBlurvalue;

 

int main()

{

   Mat ScrImage,ScrImgaeCopy1, OutImage, OutImage1, OutImage2, OutImage3, OutImage4;

   ScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

   ScrImage.copyTo(ScrImgaeCopy1);                         //将图像赋值一幅ScrImage.copyTo(ScrImgaeCopy1)ScrImgaeCopy1=ScrImage.clone()都是直接赋值图像 “ScrImgaeCopy1=ScrImage”“Mat ScrImgaeCopy1(ScrImage)”是直接赋值矩阵地址

   g_ScrImage =ScrImage.clone();

   g_ScrImageboxFilter= ScrImage.clone();

   g_ScrImageBlur =ScrImage.clone();

   g_ScrImageGaussianBlur= ScrImage.clone();

 

   namedWindow("【效果图boxFilter");

   namedWindow("【效果图blur");

   namedWindow("【效果图GaussianBlur");

 

   boxFiltervalue =1;

   Blurvalue = 1;

   GaussianBlurvalue= 1;

 

   createTrackbar("内核值","【效果图boxFilter",&boxFiltervalue, 50, on_boxFilter);

   on_boxFilter(boxFiltervalue,0);

 

   createTrackbar("内核值","【效果图blur", &Blurvalue, 50, on_Blur);

   on_boxFilter(Blurvalue,0);

 

   createTrackbar("内核值","【效果图GaussianBlur",&GaussianBlurvalue, 50, on_GaussianBlur);

   on_boxFilter(GaussianBlurvalue,0);

 

   waitKey(0);

   return NULL;

}

 

static voidon_boxFilter(int,void*)

{

   if(boxFiltervalue != 0)

   {

      boxFilter(g_ScrImage,g_ScrImageboxFilter, -1, Size(boxFiltervalue, boxFiltervalue));

      imshow("【效果图boxFilter",g_ScrImageboxFilter);

   }

 

}

 

static voidon_Blur(int,void*)

{

   if(Blurvalue != 0)

   {

      blur(g_ScrImage,g_ScrImageBlur, Size(Blurvalue, Blurvalue));

      imshow("【效果图blur", g_ScrImageboxFilter);

   }

}

 

static voidon_GaussianBlur(int,void*)

{

   if(GaussianBlurvalue != 0)

   {

      GaussianBlur(g_ScrImage,g_ScrImageboxFilter, Size(GaussianBlurvalue * 2 + 1, GaussianBlurvalue * 2 +1), 0, 0);

      imshow("【效果图GaussianBlur",g_ScrImageboxFilter);

   }

}

 

参考内容:

http://www.cnblogs.com/mq0036/p/5902104.html

阅读全文
0 0