在opencv中scharr濾波器是配合sobel算子的運算而存在的。當sobel內核為3時,結果可能會產生比較明顯的誤差,針對這一問題,Opencv提供了scharr函數。該函數只針對大小為3的核,並且運算速率和sobel函數一樣快,結果更加精確,但抗噪性不如sobel函數。
使用scharr濾波器計算x或y方向的圖像差分,它的參數變量和sobel一樣。
函數:Imgproc.Scharr(Mat src, Mat dst, int ddepth, int dx, int dy, double scale, double delta, int borderType)
參數說明:
src:源圖像
dst:檢測結果圖像
ddepth:輸出圖像的深度
dx:x方向上的差分階數
dy:y方向上的差分階數
scale:縮放因子
delta:結果存入輸出圖像前可選的delta值,默認為0
borderType:邊界模式,默認BORDER_DEFAULT
示例代碼:
public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat src = Imgcodecs.imread("F://2011031213205880528.jpg"); Mat dst = src.clone(); Mat dstx = src.clone(); Mat dsty = src.clone(); Imgproc.GaussianBlur(src, dst, new Size(3, 3), 0); Imgproc.cvtColor(dst, dst, Imgproc.COLOR_RGB2GRAY); Imgproc.Scharr(dst, dstx, -1, 1, 0, 1, 0, Core.BORDER_DEFAULT); Imgcodecs.imwrite("F://dstx.jpg", dstx); Imgproc.Scharr(dst, dsty, -1, 0, 1, 1, 0, Core.BORDER_DEFAULT); Imgcodecs.imwrite("F://dsty.jpg", dsty); Core.addWeighted(dstx, 0.5, dsty, 0.5, 0, dst); Imgcodecs.imwrite("F://dst.jpg", dst); }源圖像:
X方向的scharr:
Y方向的scharr:
合併梯度後:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。