18 Sobel運算元 測試

2021-10-02 19:10:43 字數 1746 閱讀 7262

18 - sobel 運算元測試

**和理解注釋:

#include;

using namespace cv;

int main(int argc,char* ar**)

imshow("source1",source1);

mat source1gray;

gaussianblur(source1,change1,size(3,3),0,0);

cvtcolor(change1,source1gray,6);

imshow("source1gray",source1gray);

mat xgrad, ygrad;

// scharr(source1gray, xgrad, cv_16s, 1, 0); //scharr是sobel加強版: xy -10 +10,增加權重擴大xy梯度

// scharr(source1gray, ygrad,cv_16s,0,1);

sobel(source1gray, xgrad, cv_16s, 1, 0, 3); // xy -2 +2,增加權重擴大xy梯度

// (輸入影象,輸出影象,輸出影象位圖深度,x方向,y方向,卷積核3*3): x方向sobel運算元

sobel(source1gray, ygrad, cv_16s, 0, 1, 3); // y方向sobel運算元

convertscaleabs(xgrad, xgrad); // 畫素值 反轉

convertscaleabs(ygrad, ygrad);

// imshow("xgrad-scharr", xgrad);

// imshow("ygrad-scharr", ygrad);

mat xygrad = mat(xgrad.size(), xgrad.type());

addweighted(xgrad, 0.5, ygrad, 0.5, 0, xygrad);

// 將每個畫素點xy方向sobel演算法之後0.5權重相加的畫素值賦給新影象,畫素點的值四分之一; 影象輪廓

imshow("xygrad - 權重",xygrad);

//printf("type= %d\n",xygrad);

int cols = xgrad.cols;

int rows = xgrad.rows;

for (int row = 0; row < rows;row++)

} imshow("xygrad-xy相加",xygrad);

waitkey(0);

return 0;

}

**演示效果:

一:sobel-xy方向演算法影象

二: scharr - xy 方向演算法影象

三:18 - sobel  xygrad-之後對xy方向畫素 2種不同處理結果

四:scharr xygrad-之後對xy方向畫素 2種不同處理結果

sobel運算元講解

sobel運算元是區分x,y兩種運運算元的,再通過將sobel運運算元與原圖進行卷積運算之後得出兩個矩陣所含資訊也不相同,對於複雜圖形很難看出兩者之間的差距,對於簡單的圖形 則可以看出較明顯差異,通過運算後得出 可以看出x,y只能檢測出各個方向上的資訊,所以最後還是需要通過相加得到完整的邊緣資訊。i...

Sobel運算元及cvSobel

由於專案裡要用到邊緣檢測,所以今天研究了一下最簡單的梯度的方法。首先,我們來開一下計算機是如何檢測邊緣的。以灰度影象為例,它的理論基礎是這樣的,如果出現乙個邊緣,那麼影象的灰度就會有一定的變化,為了方便假設由黑漸變為白代表乙個邊界,那麼對其灰度分析,在邊緣的灰度函式就是乙個一次函式y kx,對其求一...

Sobel運算元及cvSobel

由於專案裡要用到邊緣檢測,所以今天研究了一下最簡單的梯度的方法。首先,我們來開一下計算機是如何檢測邊緣的。以灰度影象為例,它的理論基礎是這樣的,如果出現乙個邊緣,那麼影象的灰度就會有一定的變化,為了方便假設由黑漸變為白代表乙個邊界,那麼對其灰度分析,在邊緣的灰度函式就是乙個一次函式y kx,對其求一...