0027-用OpenCV的GaussianBlur函式做高斯濾波
阿新 • • 發佈:2018-11-16
高斯濾波器是一類根據高斯函式的形狀來選擇權值的線性平滑濾波器,聽說高斯濾波器對於服從正太分佈(高斯分佈)的噪聲非常有效,然而實際來看,貌似效果也不怎麼樣啊,具體的大家可以看本篇帖子程式碼的執行結果,是筆者哪裡沒操作對麼?
GaussianBlur函式原型如下:
C++: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )
引數意義如下:
src:輸入影象。
dst:輸出影象。
ksize:核算子大小(核算子的概念見博文 https://blog.csdn.net/lehuoziyuan/article/details/84101788)。
sigmaX:高斯核在X方向上的標準差,如果寫為0,則由ksize.width計算出一個sigmaX。
sigmaY:高斯核在X方向上的標準差,如果寫為0,則和sigmaX一樣;如果sigmaX也為0,則由ksize.height計算出一個sigmaY。
borderType:這個引數的意義詳見博文https://blog.csdn.net/lehuoziyuan/article/details/84101788
示例程式碼如下:
影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注!
程式碼中用到的影象的下載連結為:http://pan.baidu.com/s/1c2ETzwc 密碼:pvnz
//opencv版本:OpenCV3.0 //VS版本:VS2013 //Author:qxsf321.net #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgproc/types_c.h> #include <opencv2/highgui/highgui.hpp> #include <opencv2/highgui/highgui_c.h> #include <time.h> #include <iostream> using namespace cv; using namespace std; int main() { //源影象 Mat img_input = imread("zhi_zhi_hua.jpg"); Mat img_output(img_input.size(), img_input.type()); Mat noise(img_input.size(), img_input.type()); /**建立一個噪聲矩陣*/ RNG rng(time(NULL)); rng.fill(noise, RNG::NORMAL, 10, 36); /**高斯分佈*/ cv::add(img_input, noise, img_output);//為原影象新增高斯噪聲 imshow("原影象", img_input); //imshow("噪聲影象", noise); imshow("加上高斯噪聲後的影象", img_output); Mat dst; GaussianBlur(img_output, dst, Size(5, 5),0, 0); imshow("高斯濾波後的影象", dst); waitKey(0); return EXIT_SUCCESS; }
執行結果截圖如下:
從截圖中可以看出高斯濾波對高斯噪聲的效果好麼?我是沒看出來....