[Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算
該系列文章是講解Python OpenCV影象處理知識,前期主要講解影象入門、OpenCV基礎用法,中期講解影象處理的各種演算法,包括影象銳化運算元、影象增強技術、影象分割等,後期結合深度學習研究影象識別、影象分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~
同時推薦作者的C++影象系列知識:
[數字影象處理] 一.MFC詳解顯示BMP格式圖片
[數字影象處理] 二.MFC單文件分割視窗顯示圖片
[數字影象處理] 三.MFC實現影象灰度、取樣和量化功能詳解
[數字影象處理] 四.MFC對話方塊繪製灰度直方圖
[數字影象處理] 五.MFC影象點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
[數字影象處理] 六.MFC空間幾何變換之影象平移、映象、旋轉、縮放詳解
[數字影象處理] 七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
前文參考:
[Python影象處理] 一.影象處理基礎知識及OpenCV入門函式
[Python影象處理] 二.OpenCV+Numpy庫讀取與修改畫素
[Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理
[Python影象處理] 四.影象平滑之均值濾波、方框濾波、高斯濾波及中值濾波
[Python影象處理] 五.影象融合、加法運算及影象型別轉換
[Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移
[Python影象處理] 七.影象閾值化處理及演算法對比
[Python影象處理] 八.影象腐蝕與影象膨脹
數學形態學(Mathematical morphology)是一門建立在格論和拓撲學基礎之上的影象分析學科,是數學形態學影象處理的基本理論。其基本的運算包括:腐蝕和膨脹、開運算和閉運算、骨架抽取、極限腐蝕、擊中擊不中變換、形態學梯度、Top-hat變換、顆粒分析、流域變換等。
本篇文章主要講解Python呼叫OpenCV實現影象形態學轉化,包括影象開運算、影象閉運算和梯度運算,基礎性知識希望對您有所幫助。
1.影象開運算
2.影象閉運算
3.影象梯度運算
PS:文章參考自己以前系列影象處理文章及OpenCV庫函式,同時部分參考網易雲lilizong老師的視訊,推薦大家去學習。同時,本篇文章涉及到《計算機圖形學》基礎知識,請大家下來補充。
PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index
一. 影象開運算
1.基本原理
影象開運算是影象依次經過腐蝕、膨脹處理後的過程。影象被腐蝕後,去除了噪聲,但是也壓縮了影象;接著對腐蝕過的影象進行膨脹處理,可以去除噪聲,並保留原有影象。如下圖所示:
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()
輸出結果如下圖所示,可以看到噪聲已經被去除了。
二. 影象閉運算
1.基本原理
影象閉運算是影象依次經過膨脹、腐蝕處理後的過程。影象先膨脹,後腐蝕,它有助於關閉前景物體內部的小孔,或物體上的小黑點。如下圖所示:
https://blog.csdn.net/hanshanbuleng/article/details/80657148
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表示黑色點。如下圖所示:
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()
輸出結果如下圖所示,可以看到中間的噪聲去掉。
希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。最近經歷的事情太多,有喜有悲,關閉了朋友圈,希望通過不斷學習和寫文章來忘記煩勞,將憂鬱轉換為動力,每週學習都記錄下來,加油!!!
(By:Eastmount 2018-11-02 中午12點 https://blog.csdn.net/Eastmount/)
相關文章
- [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算Python
- Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算PythonOpenCV梯度
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- Python 影像處理 OpenCV (10):影像處理形態學之頂帽運算與黑帽運算PythonOpenCV
- opencv 開運算、閉運算OpenCV
- 10.[機器視覺]Halcon形態學膨脹,腐蝕,開運算,閉運算視覺
- [影象處理] Python+OpenCV實現車牌區域識別及Sobel運算元PythonOpenCV
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- Python影像處理丨三種實現影像形態學轉化運算模式Python模式
- Python數學運算Python
- OpenCV計算機視覺學習(5)——形態學處理(腐蝕膨脹,開閉運算,禮帽黑帽,邊緣檢測)OpenCV計算機視覺
- opencv 梯度運算、禮貌操作OpenCV梯度
- 【數字影像處理】影像形態學演算法C語言實現(影像卷積,膨脹,腐蝕,開運算,閉運算,頂帽,黑帽,雕版,銳化)演算法C語言卷積
- Python科學計算之Numpy陣列生成與運算Python陣列
- OpenCV計算機視覺學習(15)——淺談影像處理的飽和運算和取模運算OpenCV計算機視覺
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- 使用運算元控制公式運算公式
- JavaScript 資料處理 - 運算元組JavaScript
- Python—三目運算Python
- python運算元據Python
- Python邏輯運算Python
- 使用位運算進行加法運算
- Python 影像處理 OpenCV (4):影像算數運算以及修改顏色空間PythonOpenCV
- 學習位運算
- Python學習:運算元據庫Python
- 二進位制、位運算、位移運算
- spark-運算元-分割槽運算元Spark
- day14.邏輯運算,位運算
- Python基礎運算分享Python
- 運算元
- 運算器
- 模運算
- 位運算
- SHELL之數值運算
- Python學習-算術運算子,賦值運算子和複合運算子Python賦值
- Numpy 加法運算,opencv 加法運算,影像的融合OpenCV
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- 影像濾波演算法整理--均值、中值、高斯、拉普拉斯運算元、梯度運算元:演算法梯度