形態學變換

記錄一下cvCreateStructuringElementEx()和cvMorphologyEx()兩個函數

1、cvCreateStructuringElementEx()該函數創建結構元素
1)函數原型:

IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,
int shape, int* values=NULL );

2)參數說明
cols :結構元素的列數目
rows :結構元素的行數目
anchor_x :錨點的相對水平偏移量
anchor_y :錨點的相對垂直偏移量
shape :結構元素的形狀,可以是下列值:
CV_SHAPE_RECT, 長方形元素;
CV_SHAPE_CROSS, 交錯元素 a cross-shaped element;
CV_SHAPE_ELLIPSE, 橢圓元素;
CV_SHAPE_CUSTOM, 用戶自定義元素。這種情況下參數 values 定義了 mask,即象素的那個鄰域必須考慮。
values 指向結構元素的指針,它是一個平面數組,表示對元素矩陣逐行掃描。(非零點表示該點屬於結構元)。如果指針爲空,則表示平面數組中的所有元素都是非零的,即結構元是一個長方形(該參數僅僅當shape參數是 CV_SHAPE_CUSTOM 時才予以考慮)。
函數 cv CreateStructuringElementEx 分配和填充結構 IplConvKernel, 它可作爲形態操作中的結構元素。

2、cvMorphologyEx()該函數實現高級形態學變換。
1)函數原型:
void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp,IplConvKernel* element, int operation, int iterations=1 );

2)參數說明:
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 模式下需要。

3、例子

IplConvKernel *element=cvCreateStructuringElementEx(3,1,0.5,0.5,CV_SHAPE_RECT,0);
cvMorphologyEx( src, dst, NULL,element, CV_MOP_CLOSE, 8);

cvMorphologyEx(gray,hat,NULL,CV_SHAPE_RECT,CV_MOP_GRADIENT,1);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章