opencv三種線性濾波的綜合使用
阿新 • • 發佈:2018-11-10
本文程式碼來源於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); }