void cvdilate( const cvarr* src, cvarr* dst, iplconvkernel* element=null, int iterations=1 );void cverode( const cvarr* src, cvarr* dst, iplconvkernel* element=null, int iterations=1 );
src 輸入影象.dst 輸出影象.element 用於膨脹的結構元素。若為null
, 則使用 3×3 長方形的結構元素iterations 膨脹的次數
cverode()腐蝕後cvdilate()膨脹,叫作開操作,那些離散點或遊絲線、毛刺就被過濾
cvdilate()膨脹後cverode()腐蝕,叫作閉操作,那些斷裂處就被縫合。
在opencv中某些高階形態學變換用cvmorphologyex函式完成,包括開運算,閉運算,標準形態梯度,白頂帽,黑頂帽運算。但是本博主不推薦使用該函式。
通過檢視cvmorphologyex的源**,可以發現,在執行開、閉等運算,在進行第二步形態學腐蝕和膨脹時,該函式仍然採用與第一步相同的結構元素進行。這種方法在針對一般對稱的結構元素情況是正確的,但是當結構元素為自定義的非對稱結構元素時,結果影象會發生錯誤的偏移。
正確的方法是,如前面在開、閉運算的介紹中,執行第二步腐蝕、膨脹操作時,應採用結構元素的對映(反射)進行。因此,在本文中不提倡使用cvmorphologyex函式。本文將通過一系列擴充套件的形態學變換函式替代該函式的功能,如:lhmorpopen,lhmorpclose等,請參考本部落格opencv和形態學系列文章。
在這裡僅給出該函式的簡單描述。
函式:cvmorphologyex
void cvmorphologyex( const cvarr* src, cvarr* dst, cvarr* temp,
iplconvkernel* element, int operation, int iterations=1 );
src
輸入影象.
dst
輸出影象.
temp
臨時影象,某些情況下需要
element
結構元素
operation
形態操作的型別:
cv_mop_open - 開運算
cv_mop_close - 閉運算
cv_mop_gradient - 形態梯度
cv_mop_tophat - "頂帽"
cv_mop_blackhat - "黑帽"
iterations
膨脹和腐蝕次數.
函式 cvmorphologyex 在膨脹和腐蝕基本操作的基礎上,完成一些高階的形態變換:
開運算dst=open(src,element)=dilate(erode(src,element),element)
閉運算dst=close(src,element)=erode(dilate(src,element),element)
形態梯度
dst=morph_grad(src,element)=dilate(src,element)-erode(src,element)
"頂帽"
dst=tophat(src,element)=src-open(src,element)
"黑帽"
dst=blackhat(src,element)=close(src,element)-src
臨時影象 temp 在形態梯度以及對「頂帽」和「黑帽」操作時的 in-place 模式下需要。
OPenCV學習11 形態學
在opencv sources samples下面提供了很多的官方例程,是學習opencv的最好的資源。開運算 閉運算 形態學梯度 膨脹減去腐蝕 頂帽 top hat 原影象與開操作之間的差值影象。黑帽 閉操作影象和原影象之間的差值影象。提取直線 提取步驟 輸入彩色影象 轉化為灰度影象 轉化為二值影...
OpenCV學習筆記 形態學
opencv提供了通用的形態學函式cvmorphologyex,該函式能夠實現開運算,閉運算,形態梯度,禮帽操作,黑帽操作,例題如下 include stdafx.h include cv.h include highgui.h include highgui.h int main int argc...
opencv 形態學處理
影象形態學中的幾個基本操作 腐蝕 膨脹 開操作 閉操作。1.1 腐蝕 結構a被結構b腐蝕的定義為,a b a b 可以理解為,移動結構b,如果結構b與結構a的交集完全屬於結構a的區域內,則儲存該位置點,所有滿足條件的點構成結構a被結構b腐蝕的結果。1.2 膨脹 結構a被結構b膨脹的定義為,a b a...