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,對其求一...