1. 程式人生 > >opencv學習(十五)方框濾波boxfilter()//均值濾波blur()//高斯濾波GaussianBlur()(可以此回顧滑動條操作)

opencv學習(十五)方框濾波boxfilter()//均值濾波blur()//高斯濾波GaussianBlur()(可以此回顧滑動條操作)

opencv原始碼剖析詳見參考書160-165,待深入理解

常用濾波概念

這裡寫圖片描述
這裡寫圖片描述

影象濾波過程

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

1,方框濾波boxfilter()

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

2,均值濾波blur()

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

3,高斯濾波GassianBlur()

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

綜合例項

#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

//全域性變數宣告
Mat g_srcimage, g_dstimage1, g_dstimage2, g_dstimage3;
int g_nBoxFliterValue = 3
;//方框,均值,高斯濾波引數值 int g_nMeanBlurValue = 3; int g_nGaussianBlurValue = 3; //軌跡條的回撥函式 static void on_BoxFliter(int, void*); static void on_MeanBlur(int, void*); static void on_GaussianBlur(int, void*); //主函式 int main() { system("color5E"); g_srcimage = imread("D://1.jpg", 1); if (!g_srcimage.data) { printf
("錯錯錯\n"); return false; } g_dstimage1 = g_srcimage.clone(); g_dstimage2 = g_srcimage.clone(); g_dstimage3 = g_srcimage.clone(); //顯示原圖 namedWindow("原圖視窗", 1); imshow("原圖視窗", g_srcimage); //1方框濾波 namedWindow("方框濾波", 1); createTrackbar("核心值:","方框濾波",&g_nBoxFliterValue,40
,on_BoxFliter); on_BoxFliter(g_nBoxFliterValue, 0); //2均值濾波 namedWindow("均值濾波", 1); createTrackbar("核心值:", "均值濾波", &g_nMeanBlurValue, 40, on_MeanBlur); on_MeanBlur(g_nMeanBlurValue, 0); imshow("均值濾波", g_dstimage2); //3高斯濾波 namedWindow("高斯濾波", 1); createTrackbar("核心值:", "高斯濾波", &g_nGaussianBlurValue, 40, on_GaussianBlur); on_GaussianBlur(g_nGaussianBlurValue, 0); imshow("高斯濾波", g_dstimage3); //輸出提示資訊 cout << endl << "滑動滾動條觀察影象效果\n\n" << "按下q鍵退出"; while (char(waitKey(1)) != 'q') {} return 0; } //BoxFliter,blur,GassianBlur函式定義 static void on_BoxFliter(int, void*) { boxFilter(g_srcimage, g_dstimage1, -1, Size(g_nBoxFliterValue + 1, g_nBoxFliterValue + 1)); imshow("方框濾波", g_dstimage1);//與上面的2,3,對比發現,只有將imshow函式置於此才能拖動滑動條改變核心值(2,3預設展示了濾波核心的初始值,無法隨滑動條改變而改變) } static void on_MeanBlur(int, void*) { blur(g_srcimage, g_dstimage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1),Point(-1,-1)); } static void on_GaussianBlur(int, void*) { GaussianBlur(g_srcimage, g_dstimage3, Size(g_nGaussianBlurValue*2 + 1, g_nGaussianBlurValue*2+ 1),0,0); }