首頁 > 軟體

OpenCV學習之影象形態學處理詳解

2023-02-16 06:00:58

本文是OpenCV影象視覺入門之路的第11篇文章,本文詳細的在影象形態學進行了影象處理,例如:腐蝕操作、膨脹操作、開閉運算、梯度運算、Top Hat Black Hat運算等操作。

1.腐蝕操作

從下面程式碼中可以看到有三幅腐蝕程度不同的圖,腐蝕越嚴重畫素就越模糊

import cv2
import numpy as np
from numpy import unicode
 
if __name__ == '__main__':
    img1 = cv2.imread("D:/Jupyter_Notebooks/0.jpg")  # 讀取彩色影象(BGR)
    kernel = np.ones((3, 3), np.uint8)
    erosion = cv2.erode(img1, kernel)
    cv2.imshow("img1", erosion)  # 顯示疊加影象 dst
 
    img2 = cv2.imread("D:/Jupyter_Notebooks/0.jpg")  # 讀取彩色影象(BGR)
    kernel = np.ones((10, 10), np.uint8)
    erosion_1 = cv2.erode(img2, kernel)
    cv2.imshow('erosion_1', erosion_1)
 
    img3 = cv2.imread("D:/Jupyter_Notebooks/0.jpg")  # 讀取彩色影象(BGR)
    kernel = np.ones((30, 30), np.uint8)
    erosion_2 = cv2.erode(img3, kernel)
    cv2.imshow('erosion_2', erosion_2)
 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

binary_img = np.array([ [0, 0, 0, 0, 0],
                        [0,255,255,255,0],
                        [0,255,255,255,0],
                        [0,255,255,255,0],
                        [0, 0, 0, 0, 0]],np.uint8)
ones((3,3),np.uint8)
 
[[  0   0   0   0   0]
 [  0   0   0   0   0]
 [  0   0 255   0   0]
 [  0   0   0   0   0]
 [  0   0   0   0   0]]

通過上面的例子發現,經過3x3的kernel之後,最終只保留了中心的255畫素,周邊的255都變成了0。在進行腐蝕操作的時候,就是通過kernel大小的折積在原影象上滑動,只有當kernel範圍內的畫素全為255時輸出才為255,否則輸出為0,所以kernel越大最終白色畫素保留的會越少。

2.膨脹操作

影象經過膨脹之後,白色畫素的範圍變大了。在做膨脹的時候,只要當kernel範圍內的畫素有255時輸出就為255

3.開閉運算

開運算其實就是先通過腐蝕操作後面再進行膨脹,閉運算和開運算恰好相反先通過膨脹操作後面再進行腐蝕

import cv2
import numpy as np
from numpy import unicode
 
if __name__ == '__main__':
    img1 = cv2.imread("D:/Jupyter_Notebooks/0.jpg")  # 讀取彩色影象(BGR)
    # 定義kernel
    kernel = np.ones((3, 3), np.uint8)
    # 開運算
    open_img = cv2.morphologyEx(img1, cv2.MORPH_OPEN, kernel)
    # 閉運算
    close_img = cv2.morphologyEx(img1, cv2.MORPH_CLOSE, kernel)
 
 
    cv2.imshow("open_img", open_img)  # 顯示疊加影象 dst
    cv2.imshow("close_img", close_img)  # 顯示疊加影象 dst
 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

4.梯度運算

梯度運算等價於膨脹運算-腐蝕運算 梯度運算主要是用來保留影象的輪廓

5.Top Hat Black Hat運算

Top Hat運算等價於原始影象 - 開運算,Black Hat運算等價於閉運算 - 原始影象

形態學Top-Hat變換是指形態學頂帽操作與黑帽操作,前者是計算源影象與開運算結果圖之差,後者是計算閉運算結果與源影象之差。

形態學Top-Hat變換是常用的一種濾波手段,具有高通濾波的某部分特性,可實現在影象中檢測出周圍背景亮結構或周邊背景暗結構。

頂帽操作常用於檢測影象中的峰結構。

黑帽操作常用於檢測影象中的波谷結構。

import cv2
import numpy as np
from numpy import unicode
 
if __name__ == '__main__':
    img1 = cv2.imread("D:/Jupyter_Notebooks/0.jpg")  # 讀取彩色影象(BGR)
    # 定義kernel
    kernel = np.ones((3, 3), np.uint8)
    tophat_img = cv2.morphologyEx(img1, cv2.MORPH_TOPHAT, kernel)
    blackhat_img = cv2.morphologyEx(img1, cv2.MORPH_BLACKHAT, kernel)
 
 
    cv2.imshow("tophat_img", tophat_img)  # 顯示疊加影象 dst
    cv2.imshow("blackhat_img", blackhat_img)  # 顯示疊加影象 dst
 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

以上就是OpenCV學習之影象形態學處理詳解的詳細內容,更多關於OpenCV影象形態學處理的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com