scharr滤波器
使用Scharr濾波器運算符計算x或y方向的圖像差分。其實它的參數變量和Sobel基本上是一樣的,除了沒有ksize核的大小。
C++: void Scharr( InputArray src, //源圖OutputArray dst, //目標圖int ddepth,//圖像深度int dx,// x方向上的差分階數int dy,//y方向上的差分階數double scale=1,//縮放因子double delta=0,// delta值intborderType=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方向上的差分階數。
- 第六個參數,double類型的scale,計算導數值時可選的縮放因子,默認值是1,表示默認情況下是沒有應用縮放的。我們可以在文檔中查閱getDerivKernels的相關介紹,來得到這個參數的更多信息。
- 第七個參數,double類型的delta,表示在結果存入目標圖(第二個參數dst)之前可選的delta值,有默認值0。
- 第八個參數, int類型的borderType,我們的老朋友了(萬年是最后一個參數),邊界模式,默認值為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; }總結