《OpenCV3程式設計入門》第6章-學習筆記1-boxFilter函式——方框濾波--(程式碼例項)
阿新 • • 發佈:2018-12-16
目錄
回顧基本操作和引數選項:
C++: void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )
- 第一個引數,InputArray型別的src,輸入影象,即源影象,填Mat類的物件即可。該函式對通道是獨立處理的,且可以處理任意通道數的圖片,但需要注意,待處理的圖片深度應該為CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
- 第二個引數,OutputArray型別的dst,即目標影象,需要和源圖片有一樣的尺寸和型別。
- 第三個引數,int型別的ddepth,輸出影象的深度,-1代表使用原圖深度,即src.depth()。
- 第四個引數,Size型別的ksize,核心的大小。一般這樣寫Size( w,h )來表示核心的大小( 其中,w 為畫素寬度, h為畫素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小
- 第五個引數,Point型別的anchor,表示錨點(即被平滑的那個點),注意他有預設值Point(-1,-1)。如果這個點座標是負值的話,就表示取核的中心為錨點,所以預設值Point(-1,-1)表示這個錨點在核的中心。
- 第六個引數,bool型別的normalize,預設值為true,一個識別符號,表示核心是否被其區域歸一化(normalized)了。
- 第七個引數,int型別的borderType,用於推斷影象外部畫素的某種邊界模式。有預設值BORDER_DEFAULT,我們一般不去管它。
具體程式碼操作:
//-----------------------------------【標頭檔案包含部分】--------------------------------------- // 描述:包含程式所依賴的標頭檔案 //---------------------------------------------------------------------------------------------- #include "opencv2/core/core.hpp" #include"opencv2/highgui/highgui.hpp" #include"opencv2/imgproc/imgproc.hpp" //-----------------------------------【名稱空間宣告部分】--------------------------------------- // 描述:包含程式所使用的名稱空間 //----------------------------------------------------------------------------------------------- using namespace cv; //-----------------------------------【main( )函式】-------------------------------------------- // 描述:控制檯應用程式的入口函式,我們的程式從這裡開始 //----------------------------------------------------------------------------------------------- int main() { //載入原圖 Mat image = imread("1.jpg"); //建立視窗 namedWindow("均值濾波【原圖】"); namedWindow("均值濾波【效果圖3*3】"); //顯示原圖 imshow("均值濾波【原圖】", image); //進行濾波操作 Mat out; boxFilter(image, out, -1, Size(3,3 )); //顯示效果圖 imshow("均值濾波【效果圖3*3】", out); namedWindow("均值濾波【效果圖10*10】"); //進行濾波操作 Mat out1; boxFilter(image, out1, -1, Size(10, 10)); imshow("均值濾波【效果圖10*10】", out1); waitKey(0); }
假如換成10*10