您的位置:  首頁 > 技術 > python語言 > 正文

Python圖像處理丨三種實現圖像形態學轉化運算模式

2022-07-19 14:00 https://my.oschina.net/u/4526289/blog/5555688 華為云開發者聯盟 次閱讀 條評論
摘要:本篇文章主要講解Python調用OpenCV實現圖像形態學轉化,包括圖像開運算、圖像閉運算和梯度運算

本文分享自華為云社區《[Python圖像處理] 九.形態學之圖像開運算、閉運算、梯度運算》,作者:eastmount。

數學形態學(Mathematical morphology)是一門建立在格論和拓撲學基礎之上的圖像分析學科,是數學形態學圖像處理的基本理論。其基本的運算包括:腐蝕和膨脹、開運算和閉運算、骨架抽取、極限腐蝕、擊中擊不中變換、形態學梯度、Top-hat變換、顆粒分析、流域變換等。

本篇文章主要講解Python調用OpenCV實現圖像形態學轉化,包括圖像開運算、圖像閉運算和梯度運算,基礎性知識希望對您有所幫助。

  • 1.圖像開運算
  • 2.圖像閉運算
  • 3.圖像梯度運算

一. 圖像開運算

1.基本原理

圖像開運算是圖像依次經過腐蝕、膨脹處理后的過程。圖像被腐蝕后,去除了噪聲,但是也壓縮了圖像;接著對腐蝕過的圖像進行膨脹處理,可以去除噪聲,并保留原有圖像。如下圖所示:

開運算(img) = 膨脹( 腐蝕(img) )

下圖是hanshanbuleng博主提供的開運算效果圖,推薦大家學習他的文章。

https://blog.csdn.net/hanshanbuleng/article/details/80657148

2.函數原型

圖像開運算主要使用的函數morphologyEx,它是形態學擴展的一組函數,其參數cv2.MORPH_OPEN對應開運算。其原型如下:

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

參數dst表示處理的結果,src表示原圖像,cv2.MORPH_OPEN表示開運算,kernel表示卷積核。下圖表示5*5的卷積核,可以采用函數 np.ones((5,5), np.uint8) 構建。

運行結果如下圖所示:

3.代碼實現

完整代碼如下所示:

#encoding:utf-8
import?cv2??
import?numpy?as?np??

#讀取圖片
src?=?cv2.imread('test01.png',?cv2.IMREAD_UNCHANGED)

#設置卷積核
kernel?=?np.ones((5,5),?np.uint8)

#圖像開運算
result?=?cv2.morphologyEx(src,?cv2.MORPH_OPEN,?kernel)

#顯示圖像
cv2.imshow("src",?src)
cv2.imshow("result",?result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下圖所示,可以看到噪聲已經被去除了。

但是結果result中仍然有部分噪聲,如果想去除更徹底將卷積設置為10*10的。

kernel = np.ones((10,10), np.uint8)
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

二. 圖像閉運算

1.基本原理

圖像閉運算是圖像依次經過膨脹、腐蝕處理后的過程。圖像先膨脹,后腐蝕,它有助于關閉前景物體內部的小孔,或物體上的小黑點。如下圖所示:

閉運算(img) = 腐蝕( 膨脹(img) )

下圖是hanshanbuleng博主提供的開運算效果圖,推薦大家學習他的文章。

2.函數原型

圖像閉運算主要使用的函數morphologyEx,其原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

參數dst表示處理的結果,src表示原圖像, cv2.MORPH_CLOSE表示閉運算,kernel表示卷積核。下圖表示5*5的卷積核,可以采用函數 np.ones((5,5), np.uint8) 構建。

運行結果如下圖所示:

3.代碼實現

完整代碼如下所示:

#encoding:utf-8
import?cv2??
import?numpy?as?np??

#讀取圖片
src?=?cv2.imread('test03.png',?cv2.IMREAD_UNCHANGED)

#設置卷積核
kernel?=?np.ones((10,10),?np.uint8)

#圖像閉運算
result?=?cv2.morphologyEx(src,?cv2.MORPH_CLOSE,?kernel)

#顯示圖像
cv2.imshow("src",?src)
cv2.imshow("result",?result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下圖所示,可以看到中間的噪聲去掉。

三. 圖像梯度運算

1.基本原理

圖像梯度運算是膨脹圖像減去腐蝕圖像的結果,得到圖像的輪廓,其中二值圖像1表示白色點,0表示黑色點。如下圖所示:

梯度運算(img) = 膨脹(img) - 腐蝕(img)

2.函數原型

圖像梯度運算主要使用的函數morphologyEx,參數為cv2.MORPH_GRADIENT。其原型如下:

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

參數dst表示處理的結果,src表示原圖像, cv2.MORPH_GRADIENT表示梯度運算,kernel表示卷積核。5*5的卷積核可以采用函數 np.ones((5,5), np.uint8) 構建。

運行結果如下圖所示:

3.代碼實現

完整代碼如下所示:

#encoding:utf-8
import?cv2??
import?numpy?as?np??

#讀取圖片
src?=?cv2.imread('test04.png',?cv2.IMREAD_UNCHANGED)

#設置卷積核
kernel?=?np.ones((10,10),?np.uint8)

#圖像閉運算
result?=?cv2.morphologyEx(src,?cv2.MORPH_GRADIENT,?kernel)

#顯示圖像
cv2.imshow("src",?src)
cv2.imshow("result",?result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下圖所示,可以看到中間的噪聲去掉。

該系列在github所有源代碼:https://github.com/eastmountyxz/ImageProcessing-Python

本文摘錄自eastmount X華為云開發者社區聯合出品的電子書《從零到一 ? Python圖像處理及識別》。點擊免費下載電子書《從零到一 ? Python圖像處理及識別》

?

點擊關注,第一時間了解華為云新鮮技術~

展開閱讀全文 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • 0
    感動
  • 0
    路過
  • 0
    高興
  • 0
    難過
  • 0
    搞笑
  • 0
    無聊
  • 0
    憤怒
  • 0
    同情
熱度排行
友情鏈接
18禁高潮出水呻吟娇喘mp3,日本熟妇乱人伦A片免费高清,成人午夜精品无码区,狠狠色噜噜色狠狠狠综合久久,麻豆一区二区99久久久久,年轻的妈妈4,少妇被又大又粗又爽毛片,护士张开腿让我爽了一夜,男男互攻互受h啪肉np文,你好神枪手电视剧免费观看啊,97人妻一区二区精品免费,久久久婷婷五月亚洲97号色,freegaysexvideos男男中国,国产精品国产三级国av麻豆,国产精品又黄又爽又色无遮挡网站,亚洲av无码一区二区三区网站,亚洲国产精品久久久久蜜桃,国产真人无码作爱视频免费,国产成人精品亚洲一区二区三区,亚洲欧洲日产最新,老司机带带我精彩免费,国产成人久久精品激情,日本最新av免费一区二区三区,边摸边吃奶又黄又激烈视频
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>