1 C++: void Sobel ( 2 InputArray src,//輸入圖
3 OutputArray dst,//輸出圖
4 int ddepth,//輸出圖像的深度
5 int dx, 6 int dy, 7 int ksize=3, 8 double scale=1, 9 double delta=0, 10 int borderType=BORDER_DEFAULT );
第一個參數,InputArray 類型的src,為輸入圖像,填Mat類型即可。
第二個參數,OutputArray類型的dst,即目標圖像,函數的輸出參數,需要和源圖片有一樣的尺寸和類型。
第三個參數,int類型的ddepth,輸出圖像的深度,支持如下src.depth()和ddepth的組合:
若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F
若src.depth() = CV_64F, 取ddepth = -1/CV_64F
第四個參數,int類型dx,x 方向上的差分階數。
第五個參數,int類型dy,y方向上的差分階數。
第六個參數,int類型ksize,有默認值3,表示Sobel核的大小;必須取1,3,5或7。
第七個參數,double類型的scale,計算導數值時可選的縮放因子,默認值是1,表示默認情況下是沒有應用縮放的。
我們可以在文檔中查閱getDerivKernels的相關介紹,來得到這個參數的更多信息。
第八個參數,double類型的delta,表示在結果存入目標圖(第二個參數dst)之前可選的delta值,有默認值0。
第九個參數, int類型的borderType,我們的老朋友了(萬年是最后一個參數),邊界模式,默認值為BORDER_DEFAULT。
這個參數可以在官方文檔中borderInterpolate處得到更詳細的信息。
一般情況下,都是用ksize x ksize內核來計算導數的。
然而,有一種特殊情況——當ksize為1時,往往會使用3 x 1或者1 x 3的內核。
且這種情況下,並沒有進行高斯平滑操作。