Opencv中cvSobel函式使用

2021-06-14 06:35:56 字數 2585 閱讀 9312

sobel運算元為邊沿檢測中常用的運算元之一。

以下給出opencv手冊中的說明:
使用擴充套件 sobel 運算元計算一階、二階、三階或混合影象差分 

void cvsobel( const cvarr* src, cvarr* dst, int xorder, int yorder, int aperture_size=3 );

src

輸入影象.

dst

輸出影象.

xorder

x 方向上的差分階數

yorder

y 方向上的差分階數

aperture_size

擴充套件 sobel 核的大小,必須是 1, 3, 5 或 7。 除了尺寸為 1, 其它情況下, aperture_size ×aperture_size 可分離核心將用來計算差分。對 aperture_size=1的情況, 使用 3x1 或 1x3 核心 (不進行高斯平滑操作)。這裡有乙個特殊變數 cv_scharr (=-1),對應 3x3 scharr 濾波器,可以給出比 3x3 sobel 濾波更精確的結果。scharr 濾波器係數是:

對 x-方向 以及轉置矩陣對 y-方向。

函式 cvsobel 通過對影象用相應的核心進行卷積操作來計算影象差分:

由於sobel 運算元結合了 gaussian 平滑和微分,所以,其結果或多或少對雜訊有一定的魯棒性。通常情況,函式呼叫採用如下引數 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 來計算一階 x- 或 y- 方向的影象差分。

核的選則依賴於影象原點的定義 (origin 來自 iplimage 結構的定義)。由於該函式不進行影象尺度變換,所以和輸入影象(陣列)相比,輸出影象(陣列)的元素通常具有更大的絕對數值(譯者注:即象素的深度)。為防止溢位,當輸入影象是 8 位的,要求輸出影象是 16 位的。當然可以用函式 cvconvertscale 或 cvconvertscaleabs 轉換為 8 位的。除了 8-位元 影象,函式也接受 32-位 浮點數影象。所有輸入和輸出影象都必須是單通道的,並且具有相同的影象尺寸或者roi尺寸。 

注意:由於sobel運算元求出來的值有可能出現負值,所以當影象為8u是,dst必須為16s,而不能為16u。

錯誤的理解:

cvsobel(  src,  dst, 1, 1, 3 );
等效於  cvsobel(  src,  dst1, 0, 1, 3 ); cvsobel(  src,  dst2, 1, 0, 3 ); cvadd( dst1,dst2,dst);
解釋:由

可以知道,cvsobel( src, dst, 1, 1, 3 );為

而cvsobel(  src,  dst1, 0, 1, 3 ); cvsobel(  src,  dst2, 1, 0, 3 );cvadd( dst1,dst2,dst);則為

x方向:

y方向:

x方向絕對值 + y方向絕對值 結果:

不取絕對值直接進行 x方向 + y方向 結果如下:

結論:
正確的使用sobel進行邊緣檢測的方法為:
偽**如下:
cvsobel(img_src,img_16s_sobelx,0,1,3);cvsobel(img_src,img_16s_sobely,0,1,3);
if(abs(img_16s_sobelx) + abs(img_16s_sobely)) > 255

img_dst = 255;

else 

img_dst = abs(img_16s_sobelx) + abs(img_16s_sobely);

opencv 中findContours函式介紹

findcontours 這個函式的主要功能是找到contours也就是邊界線,不過這個函式主要是給灰度圖物件服務的。函式的使用介紹 findcontours image,mode,method contours hierarchy offset contours,hierarchy 返回值cont...

OpenCV中與matlab中相對應的函式

1 matlab中的imread相當於opencv中的 cvloadimage imagename,cv load iamge anydepth cv load image anycolor 讀出的影象資訊保持了原有影象的資訊 包括通道資訊和位深資訊 rgb2gray相當於cvloadimage i...

OpenCV中與matlab中相對應的函式

1 matlab中的imread相當於opencv中的cvloadimage imagename,cv load iamge anydepth cv load image anycolor 讀出的影象資訊保持了原有影象的資訊 包括通道資訊和位深資訊 rgb2gray相當於cvloadimage im...