scharr滤波器
使用Scharr濾波器運(yùn)算符計(jì)算x或y方向的圖像差分。其實(shí)它的參數(shù)變量和Sobel基本上是一樣的,除了沒有ksize核的大小。
C++: void Scharr( InputArray src, //源圖OutputArray dst, //目標(biāo)圖int ddepth,//圖像深度int dx,// x方向上的差分階數(shù)int dy,//y方向上的差分階數(shù)double scale=1,//縮放因子double delta=0,// delta值intborderType=BORDER_DEFAULT )// 邊界模式- 第一個參數(shù),InputArray 類型的src,為輸入圖像,填Mat類型即可。
- 第二個參數(shù),OutputArray類型的dst,即目標(biāo)圖像,函數(shù)的輸出參數(shù),需要和源圖片有一樣的尺寸和類型。
- 第三個參數(shù),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
- 第四個參數(shù),int類型dx,x方向上的差分階數(shù)。
- 第五個參數(shù),int類型dy,y方向上的差分階數(shù)。
- 第六個參數(shù),double類型的scale,計(jì)算導(dǎo)數(shù)值時可選的縮放因子,默認(rèn)值是1,表示默認(rèn)情況下是沒有應(yīng)用縮放的。我們可以在文檔中查閱getDerivKernels的相關(guān)介紹,來得到這個參數(shù)的更多信息。
- 第七個參數(shù),double類型的delta,表示在結(jié)果存入目標(biāo)圖(第二個參數(shù)dst)之前可選的delta值,有默認(rèn)值0。
- 第八個參數(shù), int類型的borderType,我們的老朋友了(萬年是最后一個參數(shù)),邊界模式,默認(rèn)值為BORDER_DEFAULT。
與
Sobel(src, dst, ddepth, dx, dy, CV_SCHARR,scale, delta, borderType); opencv代碼: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> #include<cv.h> #include<stdlib.h> using namespace cv; using namespace std;int main() {Mat src, dst;src = imread("D:6.jpg");/*Mat kx = (Mat_<float>(1, 3) << 0,-1,0);Mat ky = (Mat_<float>(1, 3) << -1,0, -1);sepFilter2D(src, dst, src.depth(),kx,ky,Point(-1,-1),0,BORDER_DEFAULT );*/Scharr(src, dst, src.depth(), 1, 0, 1, 0, BORDER_DEFAULT);imshow("shiyan", dst);waitKey(0);return 0; }總結(jié)