opencv —— morphologyEx 開運算、閉運算、形態學梯度、頂帽、黑帽


 開運算:先腐蝕后膨脹。

能夠排除小亮點。

閉運算:先膨脹后腐蝕。

能夠排除小黑點。

形態學梯度:膨脹圖 — 腐蝕圖。

對二值圖像進行這一操作,可將圖塊的邊緣突出出來,故可用來保留物體邊緣輪廓。

頂帽:原圖 — 開運算結果。

可以認為是找到那些被開運算排除的小亮點。

黑帽:閉運算結果 — 原圖。 

可以認為是找到那些被閉運算排除的小黑點。

 

為了方便,opencv 將這些操作集合到了一個函數中 morphologyEx。要實現不同操作,僅需改變其第三個成員變量 形態學運算標識符。 

 

形態學濾波:morphologyEx 函數

void morphologyEx(InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue());
  • src,輸入圖像,即原圖像,填 Mat 類的對象即可。
  • dst,目標圖像,需要和原圖片有一樣的尺寸和類型。
  • op,形態學運算的類型。

MORPH_ERODE = 0, //腐蝕

MORPH_DILATE = 1, //膨脹

MORPH_OPEN = 2, //開操作

MORPH_CLOSE = 3, //閉操作

MORPH_GRADIENT = 4, //梯度操作

MORPH_TOPHAT = 5, //頂帽操作

MORPH_BLACKHAT = 6, //黑帽操作

  • kernel,膨脹操作的核。當為 NULL 時,表示的是使用參考點位於中心,大小 3×3 的核。

一般用函數 getStructuringElement 配合這個參數使用。

例如:Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));

Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1, -1));
    • shape,矩形:MORPH_RECT

交叉形:MORPH_CROSS

橢圓形:MORPH_ELLIPSE

    • ksize,內核的尺寸。
    • anchor,錨點的位置,默認位於中心。
  • anchor,錨點的位置,默認位於中心。
  • iterations 迭代使用 dilate() 的次數,默認值為 1。
  • borderType,邊界拓展的方法。
  • borderValue,當邊界為常數時的邊界值,有默認值,一般不用管。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM