opencv 形態學處理

2021-08-18 06:53:40 字數 2629 閱讀 4846

影象形態學中的幾個基本操作:腐蝕、膨脹、開操作、閉操作。

1.1 腐蝕

結構a被結構b腐蝕的定義為, a⨀

b=a⨀b=

可以理解為,移動結構b,如果結構b與結構a的交集完全屬於結構a的區域內,則儲存該位置點,所有滿足條件的點構成結構a被結構b腐蝕的結果。 

1.2 膨脹

結構a被結構b膨脹的定義為, a⨁

b=a⨁b=

可以理解為,將結構b在結構a上進行卷積操作,如果移動結構b的過程中,與結構a存在重疊區域,則記錄該位置,所有移動結構b與結構a存在交集的位置的集合為結構a在結構b作用下的膨脹結果。 

圖示中紅色框內的區域表示結構a在結構b的作用下膨脹的結果。 

這裡有另外乙個例子。

1.3 開運算

先腐蝕後膨脹的操作稱之為開操作。它具有消除細小物體,在纖細處分離物體和平滑較大物體邊界的作用。 採用上圖的結構b對原件進行開操作。

1.4 閉運算

先膨脹後腐蝕的操作稱之為閉操作。它具有填充物體內細小空洞,連線鄰近物體和平滑邊界的作用。 

採用上圖的結構對原件進行閉操作。

2.1 膨脹

dst

=cv2

.dilate

(src

,kernel

[,dst

[,anchor

[,iterations

[,bordertype

[,bordervalue

]]]]])

2.2 腐蝕

dst=cv2.erode(src, kernel[, dst[, anchor[, iterations[, bordertype[, bordervalue]]]]])
再講講這個用於計算kernel的函式getstructuringelement,原型:

retval

=cv2

.getstructuringelement

(shape

,ksize

[,anchor

])

2.3 開運算和閉運算

開運算:

先腐蝕後膨脹,用來消除小物體、在纖細點處分離物體、平滑較大物體的邊界的同時並不明顯改變其面積。

閉運算:

先膨脹後腐蝕,閉運算能夠排除小的黑色區域。

形態學梯度:

膨脹圖與腐蝕圖之差,通常用來保留邊緣輪廓(不是輪廓和邊緣識別)。

上述三種常規操作是通過呼叫函式morphologyex並修改對應的引數來實現的。

函式原型:

dst

=cv2

.morphologyex

(src,op

,kernel[,dst

[,anchor

[,iterations

[,bordertype

[,bordervalue

]]]]])

mat src = imread("d:\\cv_study\\隨機練\\gonglu.jpg");

mat dilate_dst, gray, erode_dst;

mat element = getstructuringelement(morph_rect, size(8, 8));

dilate(src, dilate_dst, element);

erode(src, erode_dst, element);

3.2 開和閉

mat src = imread("d:\\cv_study\\隨機練\\gonglu.jpg");

由上面的結果可以看出開運算能夠消除小物體,閉運算能夠排除小黑色區域。以上就是關於形態學處理的內容,歡迎批評指正。

OpenCV 形態學處理

形態學主要處理二值影象 0黑1白 kernel np.ones 5 5 np.uint8 numpy庫生成1陣列,資料型別為整形 img2 cv2.erode img,kernel,iterations 迭代次數,預設為1 膨脹又叫逆腐蝕。先腐蝕後膨脹,可用於降噪。我們把先腐蝕後膨脹的操作合併為開運...

OpenCV高階 形態學處理

目標 opencv函式 腐蝕erode 膨脹dilate 簡而言之 一組基於形狀處理影象的操作。形態學操作將結構元素應用於輸入影象並生成輸出影象。最基本的形態學操作是 侵蝕和膨脹。它們有廣泛的用途,即 1.消除噪音 2.隔離單個元素並連線影象中的不同元素。3.查詢影象中的強度凸起或孔 我們將使用以下...

形態學處理

腐蝕,膨脹 效果就是暗的地方侵入亮的地方 使用 給乙個結構元 二維陣列 結構元中有乙個錨點,計算過程就是如果結構元對應的區域有暗的,那錨點就變為暗的 記作 import cv2 as cv import numpy as np s cv.getstructuringelement cv.morph ...