openCV:形態(tài)學(xué)操作

基本概念

定義

形態(tài)學(xué)操作是根據(jù)圖像形狀進(jìn)行的簡單操作荆残。一般情況下對二值化圖像進(jìn)行的操作啼肩。需要輸入兩個參數(shù),一個是原始圖像硕盹,第二個被稱為結(jié)構(gòu)化元素或核符匾,它是用來決定操作的性質(zhì)的。兩個基本的形態(tài)學(xué)操作是腐蝕和膨脹莱睁。他們的變體構(gòu)成了開運(yùn)算待讳,閉運(yùn)算,梯度等仰剿。

結(jié)構(gòu)元素

圖像處理經(jīng)常要用到形態(tài)學(xué)操作,其中首先要獲取結(jié)構(gòu)元素痴晦。包括結(jié)構(gòu)元素的大小及形狀南吮。

使用 Numpy 構(gòu)建的結(jié)構(gòu)化元素,它是正方形的誊酌。但有時我們需要構(gòu)建一個橢圓形/圓形的核部凑。為了實(shí)現(xiàn)這種要求露乏,使用OpenCV函數(shù) cv2.getStructuringElement()。只需要告訴他需要的核的形狀和大小涂邀。

import cv2 #opencv讀取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline 

def cv_showimg(name,img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
# 矩形
kernel = np.ones((5,5),np.uint8)
kernel_1 = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
print("矩形:\n%s"%kernel)
print("矩形1:\n%s"%kernel_1)
# 橢圓
kernel_2 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
print("橢圓:\n%s"%kernel_2)
# 十字形
kernel_3 = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
print("十字:\n%s"%kernel_3)  
矩形:
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
矩形1:
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
橢圓:
[[0 0 1 0 0]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [0 0 1 0 0]]
十字:
[[0 0 1 0 0]
 [0 0 1 0 0]
 [1 1 1 1 1]
 [0 0 1 0 0]
 [0 0 1 0 0]]
矩形:
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
矩形1:
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
橢圓:
[[0 0 1 0 0]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [0 0 1 0 0]]
十字:
[[0 0 1 0 0]
 [0 0 1 0 0]
 [1 1 1 1 1]
 [0 0 1 0 0]
 [0 0 1 0 0]]

基本形態(tài)學(xué)操作

腐蝕操作

在深藍(lán)色正方形上使用圓盤進(jìn)行腐蝕運(yùn)算瘟仿,結(jié)果為淺藍(lán)色正方形。

腐蝕作用:可以用來消除小且無意義的物體比勉。

腐蝕原理圖.png

dst =cv2.erode(src,kernel,iterations = 1)

參數(shù)意義如下:

  • src:輸入圖像
  • dst:輸出圖像
  • kernel:核(結(jié)構(gòu)元素)
  • iterations:迭代次數(shù)
img = cv2.imread('dige.png')
cv_showimg('img',img)
原圖.PNG
kernel = np.ones((3,3),np.uint8) 
erosion = cv2.erode(img,kernel,iterations = 1)
cv_showimg('erosion',erosion)
腐蝕操作.PNG
pie = cv2.imread('pie.png')
kernel = np.ones((30,30),np.uint8) 
erosion_1 = cv2.erode(pie,kernel,iterations = 1)
erosion_2 = cv2.erode(pie,kernel,iterations = 2)
res = np.hstack((pie,erosion_1,erosion_2))
cv_showimg('res',res)
腐蝕操作的迭代結(jié)果.PNG

膨脹操作

在深藍(lán)色正方形上使用圓盤進(jìn)行膨脹運(yùn)算劳较,結(jié)果為淺藍(lán)色正方形,帶有圓角浩聋。

膨脹作用:可以用來填補(bǔ)物體中的空洞观蜗。

膨脹原理圖.png

dst = cv2.dilate(src,kernel,iterations = 1)

參數(shù)意義如下:

  • src:輸入圖像
  • dst:輸出圖像
  • kernel:核(結(jié)構(gòu)元素)
  • iterations:迭代次數(shù)
kernel = np.ones((3,3),np.uint8) 
dilate = cv2.dilate(img,kernel,iterations = 1)
cv_showimg('dilate',dilate)
膨脹操作.PNG
pie = cv2.imread('pie.png')
kernel = np.ones((30,30),np.uint8) 
dilate_1 = cv2.dilate(pie,kernel,iterations = 1)
dilate_2 = cv2.dilate(pie,kernel,iterations = 2)
res = np.hstack((pie,dilate_1,dilate_2))
cv_showimg('res',res)
膨脹操作的迭代結(jié)果.PNG

開運(yùn)算

在數(shù)學(xué)形態(tài)學(xué)中,開運(yùn)算被定義為先腐蝕后膨脹衣洁。

開運(yùn)算作用:它被用來去除噪聲

opening = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

參數(shù)意義如下:

  • src:輸入圖像
  • cv2.MORPH_OPEN:形態(tài)學(xué)開運(yùn)算
  • kernel:核(結(jié)構(gòu)元素)
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv_showimg('opening',opening)
開運(yùn)算.PNG

高級形態(tài)學(xué)操作

閉運(yùn)算

在數(shù)學(xué)形態(tài)學(xué)中墓捻,閉運(yùn)算被定義為先膨脹后腐蝕。

閉運(yùn)算作用:經(jīng)常被用來填充前景物體中的小洞坊夫,或者前景物體上的小黑點(diǎn)砖第。

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

參數(shù)意義如下:

  • src:輸入圖像
  • cv2.MORPH_CLOSE:形態(tài)學(xué)閉運(yùn)算
  • kernel:核(結(jié)構(gòu)元素)
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8) 
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv_showimg('closing',closing)
閉運(yùn)算.PNG

形態(tài)學(xué)梯度

其實(shí)就是一幅圖像膨脹與腐蝕的之差。

形態(tài)學(xué)梯度作用:提取前景物體的輪廓环凿。

gradient = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

參數(shù)意義如下:

  • src:輸入圖像
  • cv2.MORPH_GRADIENT:形態(tài)學(xué)閉運(yùn)算
  • kernel:核(結(jié)構(gòu)元素)
pie = cv2.imread('pie.png')
kernel = np.ones((7,7),np.uint8) 
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
cv_showimg('gradient',gradient)
形態(tài)學(xué)梯度.PNG

禮帽操作

原始圖像與進(jìn)行開運(yùn)算之后得到的圖像的差厂画。

形態(tài)學(xué)禮帽作用:提取圖像中的噪聲。

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

參數(shù)意義如下:

  • src:輸入圖像
  • cv2.MORPH_TOPHAT:形態(tài)學(xué)禮帽
  • kernel:核(結(jié)構(gòu)元素)
img = cv2.imread('dige.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv_showimg('tophat',tophat)
禮帽.PNG

黑帽

進(jìn)行閉運(yùn)算之后得到的圖像與原始圖像的差拷邢。

形態(tài)學(xué)黑帽作用:突出噪聲與原始圖像的交界處袱院,可近似表現(xiàn)出一些輪廓。

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

參數(shù)意義如下:

  • src:輸入圖像
  • cv2.MORPH_BLACKHAT:形態(tài)學(xué)黑帽
  • kernel:核(結(jié)構(gòu)元素)
img = cv2.imread('dige.png')
blackhat  = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv_showimg('blackhat',blackhat)
黑帽操作.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞭稼,一起剝皮案震驚了整個濱河市忽洛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌环肘,老刑警劉巖欲虚,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悔雹,居然都是意外死亡复哆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門腌零,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梯找,“玉大人,你說我怎么就攤上這事益涧⌒獯福” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長久免。 經(jīng)常有香客問我浅辙,道長,這世上最難降的妖魔是什么阎姥? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任记舆,我火速辦了婚禮,結(jié)果婚禮上呼巴,老公的妹妹穿的比我還像新娘泽腮。我一直安慰自己,他們只是感情好伊磺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布盛正。 她就那樣靜靜地躺著,像睡著了一般屑埋。 火紅的嫁衣襯著肌膚如雪豪筝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天摘能,我揣著相機(jī)與錄音续崖,去河邊找鬼。 笑死团搞,一個胖子當(dāng)著我的面吹牛严望,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻恐,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼像吻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了复隆?” 一聲冷哼從身側(cè)響起拨匆,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挽拂,沒想到半個月后惭每,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亏栈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年台腥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绒北。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡黎侈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镇饮,到底是詐尸還是另有隱情蜓竹,我是刑警寧澤箕母,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布储藐,位于F島的核電站俱济,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏钙勃。R本人自食惡果不足惜蛛碌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辖源。 院中可真熱鬧蔚携,春花似錦、人聲如沸克饶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾湃。三九已至亡脑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邀跃,已是汗流浹背霉咨。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拍屑,地道東北人途戒。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像僵驰,于是被迫代替她去往敵國和親喷斋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容