使用OPENCV中的Sobel函式找函式邊緣並顯示

2021-07-31 21:34:31 字數 1327 閱讀 6815

mat mat_blur;

mat_blur = in.clone();

gaussianblur(in, mat_blur, size(blursize, blursize), 0, 0, border_default);//高斯平滑

mat mat_gray;

if (mat_blur.channels() == 3)

cvtcolor(mat_blur, mat_gray, cv_rgb2gray);

else

mat_gray = mat_blur;

int scale = sobel_scale;

int delta = sobel_delta;

int ddepth = sobel_ddepth;

mat grad_x, grad_y;

mat abs_grad_x, abs_grad_y;

sobel(mat_gray, grad_x, ddepth, 1, 0, 3, scale, delta, border_default);

convertscaleabs(grad_x, abs_grad_x);//

對於每個輸入陣列的元素函式

convertscaleabs

進行三次操作依次是:縮放,得到乙個絕對值,轉換成無符號8位型別

mat grad;

addweighted(abs_grad_x, sobel_x_weight, 0, 0, 0, grad);//

函式addweighted

兩個陣列的加權

mat mat_threshold;

double otsu_thresh_val =

threshold(grad, mat_threshold, 0, 255, cv_thresh_otsu + cv_thresh_binary);

mat element = getstructuringelement(morph_rect, size(morphw, morphh));

morphologyex(mat_threshold, mat_threshold, morph_close, element);

//

閉運算

out = mat_threshold;

return 0;

}element:腐蝕操作的核心。 如果不指定,預設為乙個簡單的

anchor:預設為point(-1,-1),核心中心點。省略時為預設值。

iterations:腐蝕次數。省略時為預設值1。

bordertype:推斷邊緣型別,具體參見borderinterpolate函式。預設為border_default,省略時為預設值。

OPENCV中的Sobel函式

sobel運算元是一種常用的邊緣檢測運算元,是一階的梯度演算法。對雜訊具有平滑作用,提供較為精確的邊緣方向資訊,邊緣定位精度不夠高。當對精度要求不是很高時,是一種較為常用的邊緣檢測方法。它進行處理的模板如下 其中,gx是橫向的運算元,gy是縱向的運算元。原影象記為f,則 gx gx f gy gy ...

OpenCV學習筆記 Sobel運算元

該函式如下 使用擴充套件 sobel 運算元計算一階 二階 三階或混合影象差分 void cvsobel const cvarr src,cvarr dst,int xorder,int yorder,int aperture size 3 src 輸入影象.dst輸出影象.xorder x 方向上...

OpenCV學習筆記 Sobel運算元

該函式如下 使用擴充套件 sobel 運算元計算一階 二階 三階或混合影象差分 void cvsobel const cvarr src,cvarr dst,int xorder,int yorder,int aperture size 3 src 輸入影象.dst輸出影象.xorder x 方向上...