1. 程式人生 > >opencv三種線性濾波的綜合使用

opencv三種線性濾波的綜合使用

本文程式碼來源於https://blog.csdn.net/poem_qianmo/article/details/22745559,在上一篇文章的基礎上增加了進度條的支援,可以更加直觀的看出濾波的效果

#include "widget.h"
#include <QApplication>


#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;


Mat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3;//儲存圖片的Mat型別
int g_nBoxFilterValue=3;  //方框濾波引數值
int g_nMeanBlurValue=3;  //均值濾波引數值
int g_nGaussianBlurValue=3;  //高斯濾波引數值


//軌跡條的回撥函式
static void on_BoxFilter(int, void *);            //方框濾波
static void on_MeanBlur(int, void *);           //均值濾波
static void on_GaussianBlur(int, void *);                    //高斯濾波



int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    Widget w;
//    w.show();

    //改變console字型顏色
    system("color5E");

    //載入原圖
    g_srcImage= imread( "../imgs/a.jpeg", 1 );
    if(!g_srcImage.data )
    {
        //printf("Oh,no,讀取srcImage錯誤~!\n"); return false;
    }

    //克隆原圖到三個Mat型別中
    g_dstImage1= g_srcImage.clone( );
    g_dstImage2= g_srcImage.clone( );
    g_dstImage3= g_srcImage.clone( );

    //顯示原圖
    namedWindow("【<0>原圖視窗】", 1);
    imshow("【<0>原圖視窗】",g_srcImage);


    //【<1>方框濾波】
    //建立視窗
    namedWindow("【<1>方框濾波】", 1);
    //建立軌跡條
    createTrackbar("核心值:", "【<1>方框濾波】",&g_nBoxFilterValue, 40,on_BoxFilter );
    on_MeanBlur(g_nBoxFilterValue,0);
    imshow("【<1>方框濾波】", g_dstImage1);


    //【<2>均值濾波】
    //建立視窗
    namedWindow("【<2>均值濾波】", 1);
    //建立軌跡條
    createTrackbar("核心值:", "【<2>均值濾波】",&g_nMeanBlurValue, 40,on_MeanBlur );
    on_MeanBlur(g_nMeanBlurValue,0);

    //【<3>高斯濾波】
    //建立視窗
    namedWindow("【<3>高斯濾波】", 1);
    //建立軌跡條
    createTrackbar("核心值:", "【<3>高斯濾波】",&g_nGaussianBlurValue, 40,on_GaussianBlur );
    on_GaussianBlur(g_nGaussianBlurValue,0);


    return a.exec();
}


//     描述:方框濾波操作的回撥函式
static void on_BoxFilter(int, void *)
{
       //方框濾波操作
       boxFilter(g_srcImage, g_dstImage1, -1,Size( g_nBoxFilterValue+1, g_nBoxFilterValue+1));
       //顯示視窗
       imshow("【<1>方框濾波】", g_dstImage1);
}


//     描述:均值濾波操作的回撥函式
static void on_MeanBlur(int, void *)
{
       //均值濾波操作
       blur(g_srcImage, g_dstImage2, Size( g_nMeanBlurValue+1, g_nMeanBlurValue+1),Point(-1,-1));
       //顯示視窗
       imshow("【<2>均值濾波】", g_dstImage2);
}


//     描述:高斯濾波操作的回撥函式
static void on_GaussianBlur(int, void *)
{
       //高斯濾波操作
       GaussianBlur(g_srcImage, g_dstImage3, Size( g_nGaussianBlurValue*2+1,g_nGaussianBlurValue*2+1 ), 0, 0);
       //顯示視窗
       imshow("【<3>高斯濾波】", g_dstImage3);
}