一:基本知識
在影象處理中,最基本的形態學操作有二種,他們是:膨脹與腐蝕(dilation與erosion)。
其實,膨脹就是求區域性最大值的操作。
按數學方面來說,膨脹或者腐蝕操作就是將影象(或影象的一部分區域,我們稱之為a)與核(我們稱之為b)進行卷積。
核可以是任何的形狀和大小,它擁有乙個單獨定義出來的參考點,我們稱其為錨點(anchorpoint)。多數情況下,核是乙個小的中間帶有參考點和實心正方形或者圓盤,其實,我們可以把核視為模板或者掩碼。
而膨脹就是求區域性最大值的操作,核b與圖形卷積,即計算核b覆蓋的區域的畫素點的最大值,並把這個最大值賦值給參考點指定的畫素。這樣就會使影象中的高亮區域逐漸增長。如下圖所示,這就是膨脹操作的初衷。
而腐蝕和膨脹則是相反的操作
二:形態學膨脹——dilate函式
函式原型:
c++: void dilate(
inputarray src,
outputarray dst,
inputarray kernel,
point anchor=point(-1,-1),
int iterations=1,
int bordertype=border_constant,
const scalar& bordervalue=morphologydefaultbordervalue()
);
而getstructuringelement函式的第二和第三個引數分別是核心的尺寸以及錨點的位置。我們一般在呼叫erode以及dilate函式之前,先定義乙個mat型別的變數來獲得getstructuringelement函式的返回值。對於錨點的位置,有預設值point(-1,-1),表示錨點位於中心。且需要注意,十字形的element形狀唯一依賴於錨點的位置。而在其他情況下,錨點只是影響了形態**算結果的偏移。
使用erode函式,一般我們只需要填前面的三個引數,後面的四個引數都有預設值。而且往往結合getstructuringelement一起使用。
使用例項:
//獲取自定義核
mat element = getstructuringelement(morph_rect, size(15, 15));
mat out;
//進行膨脹操作
dilate(image, out, element)三:形態學腐蝕——erode函式
函式原型:
c++: void erode(
inputarray src,
outputarray dst,
inputarray kernel,
point anchor=point(-1,-1),
int iterations=1,
int bordertype=border_constant,
const scalar& bordervalue=morphologydefaultbordervalue()
);
同樣的,使用erode函式,一般我們只需要填前面的三個引數,後面的四個引數都有預設值。而且往往結合getstructuringelement一起使用。
使用例項:
//載入原圖
//獲取自定義核
mat element = getstructuringelement(morph_rect, size(15, 15));
mat out;
//進行腐蝕操作
erode(image,out, element);
OpenCV 學習筆記(四)
今天學習了直方圖均衡化 histogram equalization 的方法,用於增強影象的對比度,就是把灰度直方圖中在某個比較集中的灰度區間上的畫素點更加均衡地重新分配到全部灰度區間上的方法。實質上就是建立乙個對映,乙個單調的畫素亮度變換q t p 將輸入直方圖h p 轉換為輸出直方圖g q 具體...
OpenCV學習筆記 四
離散傅利葉變換原理 把一張分解成正弦和余弦兩個部分,空間域轉換到頻域 傅利葉變換的理論就是任意函式都可以表示成無數個正弦和余弦函式的和的部分。空間域是實數,頻域分解後是複數,因此變換後有實數影象,虛數影象 幅度影象,虛數影象 逆傅利葉變化的時候必須需要幅度影象和虛數影象 在頻域中,高頻代表影象細節,...
opencv3計算機視覺 Python(四)
在opencv中,實現了grabcut分割演算法,該演算法可以方便的分割出前景影象,操作簡單,而且分割的效果很好。演算法的原理參見papaer grabcut interactive foreground extraction using iterated graph cuts 比如下面的一副圖,我...