[OpenCV基礎][Python]形態學運算(侵蝕、膨脹、梯度)

更新於 發佈於 閱讀時間約 6 分鐘

形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。

在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。

raw-image

形態學運算是是通過使用結構元素(也稱為卷積核內核)在圖像上滑動,對覆蓋區域進行矩陣運算,將覆蓋區域中的像素值設置為結構元素中相應位置最大值最小值

膨脹運算圖

膨脹運算圖

侵蝕運算圖

侵蝕運算圖


常見應用場景

  1. 物體檢測與分割:
    • 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。這對於計算機視覺中的目標檢測分割任務非常有用。
    • OpenCV與有提供一個圖像分割的演算法watershed敝人文章連結如下:
    • [OpenCV應用][Python]應用watershed分割圖像(硬幣分割)
  2. 雜訊去除:
    • 在二值化影像中,形態學操作可以用來去除小的雜訊點,使影像更加清晰。侵蝕操作特別適合這一應用,它可以消除小的斑點和細小連接,而不影響主要的物體結構
  3. 填充與洞補:
    • 閉運算可以用來填充物體內的小洞,使物體更加完整。
  4. 文本的二值化:
    • 在光學字符識別(OCR)等應用中,形態學操作可以用來處理二值化的圖像,增強文本區域的形狀,使得字符更容易被識別
  5. 圖像的特徵提取:
    • 形態學操作可以用於提取影像中的結構和特徵,例如提取圖像中的邊緣、角點等。這對於後續的圖像分析特徵識別非常重要。

膨脹(Dilation):

通常用於擴大和強調二值影像中的物體。膨脹的效果是將物體的邊界擴張

import cv2
import numpy as np

# 讀取二值影像
binary_image = cv2.imread('binary_image.jpg', cv2.IMREAD_GRAYSCALE)

# 定義膨脹的結構元素
kernel = np.ones((5, 5), np.uint8)

# 進行膨脹操作
dilated_image = cv2.dilate(binary_image, kernel, iterations=2)

cv2.imread('binary_image.jpg', cv2.IMREAD_GRAYSCALE)
1. 使用OpenCV的imread函數讀取名為'binary_image.jpg'的影像
2. 並使用cv2.IMREAD_GRAYSCALE將其轉換為灰度影像。

np.ones((5, 5), np.uint8)
1. 創建一個大小為 (5, 5) 的二維NumPy陣列,所有元素都是1,並指定數據類型為 np.uint8
2. 這個陣列被用作侵蝕操作結構元素,它決定了侵蝕的形狀和大小。

cv2.dilate(binary_image, kernel, iterations=1)
1. binary_image:要進行膨脹的影像,這裡是灰度影像。
2. kernel:膨脹的結構元素。
3. iterations膨脹迭代次數,可以控制膨脹的程度。在這裡設定為2,表示進行二次膨脹操作。


侵蝕(Erosion):

通常用於縮小和平滑二值影像中的物體。侵蝕的效果是將物體的邊界收縮

import cv2
import numpy as np

# 讀取二值影像
binary_image = cv2.imread('binary_image.jpg', cv2.IMREAD_GRAYSCALE)

# 定義侵蝕的結構元素
kernel = np.ones((5, 5), np.uint8)

# 進行侵蝕操作
eroded_image = cv2.erode(binary_image, kernel, iterations=1)

cv2.erode(binary_image, kernel, iterations=1)
1. binary_image:要進行侵蝕的影像,這裡是灰度影像。
2. kernel:侵蝕的結構元素。
3. iterations:侵蝕的迭代次數,可以控制侵蝕的程度。在這裡設定為1,表示進行一次侵蝕操作。


形態學梯度運算

Morphological Gradient)是形態學操作的一種,膨脹的圖減去侵蝕的圖,通常用於檢測物體的邊緣。它是膨脹操作和侵蝕操作的差異。

import cv2
import numpy as np

# 讀取影像
image = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE)

# 定義膨脹的結構元素
dilation_kernel = np.ones((5, 5), np.uint8)

# 定義侵蝕的結構元素
erosion_kernel = np.ones((5, 5), np.uint8)

# 進行膨脹操作
dilated_image = cv2.dilate(image, dilation_kernel, iterations=1)

# 進行侵蝕操作
eroded_image = cv2.erode(image, erosion_kernel, iterations=1)

# 形態學梯度運算:膨脹的結果減去侵蝕的結果
morphological_gradient = cv2.subtract(dilated_image, eroded_image)

# 顯示原始影像、膨脹結果、侵蝕結果和形態學梯度結果
cv2.imshow('Original Image', image)
cv2.imshow('Dilated Image', dilated_image)
cv2.imshow('Eroded Image', eroded_image)
cv2.imshow('Morphological Gradient', morphological_gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
梯度運算

梯度運算


還有其他形態學運算,例如開運算閉運算禮帽運算、黑帽運算。就下章節在揭曉囉







留言
avatar-img
留言分享你的想法!
螃蟹_crab-avatar-img
發文者
2024/02/02
[OpenCV基礎][Python]形態學運算(開、閉、禮帽、黑帽)提及了這篇文章,趕快過去看看吧!
小松鼠-avatar-img
2024/01/30
好懷念阿!剛好以前也修過影像處理,專案也剛好是用OPEN CV實作的 哈哈
螃蟹_crab-avatar-img
發文者
2024/01/30
小松鼠 學校時,也有學過~但沒用到,很快就忘光了,哈哈
avatar-img
螃蟹_crab的沙龍
141會員
253內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/02/15
在電腦視覺應用中,輪廓(Contour)常用來描述物體的邊界。 當圖像中有雜訊或物體邊緣過於複雜時,我們可以利用輪廓逼近技術,將輪廓簡化成較少點數的多邊形,這不僅有助於後續的形狀分析,也能提高處理速度。 本文將介紹如何使用 OpenCV 中的 cv2.arcLength 與 cv2.approx
Thumbnail
2025/02/15
在電腦視覺應用中,輪廓(Contour)常用來描述物體的邊界。 當圖像中有雜訊或物體邊緣過於複雜時,我們可以利用輪廓逼近技術,將輪廓簡化成較少點數的多邊形,這不僅有助於後續的形狀分析,也能提高處理速度。 本文將介紹如何使用 OpenCV 中的 cv2.arcLength 與 cv2.approx
Thumbnail
2024/12/02
中值濾波器(Adaptive Median Filter)是一種針對噪聲去除的圖像處理技術,主要應用於處理含有椒鹽雜訊的圖像,但在椒鹽雜訊過大時就會面臨,若為了處理掉雜訊,使用的處理窗口(kernel)就要大一點,會造成圖像的邊緣模糊掉。 後面為解決這個問題,就發展了自適應中值濾波器,其概念源自於
Thumbnail
2024/12/02
中值濾波器(Adaptive Median Filter)是一種針對噪聲去除的圖像處理技術,主要應用於處理含有椒鹽雜訊的圖像,但在椒鹽雜訊過大時就會面臨,若為了處理掉雜訊,使用的處理窗口(kernel)就要大一點,會造成圖像的邊緣模糊掉。 後面為解決這個問題,就發展了自適應中值濾波器,其概念源自於
Thumbnail
2024/10/03
在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。
Thumbnail
2024/10/03
在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
瞭解二值化影像的應用和程式語法,包括物體檢測和分割、邊緣檢測、圖像分析和測量、文檔辨識,以及使用cv2.threshold的參數和程式範例。
Thumbnail
瞭解二值化影像的應用和程式語法,包括物體檢測和分割、邊緣檢測、圖像分析和測量、文檔辨識,以及使用cv2.threshold的參數和程式範例。
Thumbnail
在影像處理中,我們總是想要讓特徵更加明顯一點,可以使用銳利化的方式將特徵的邊緣增強,提升影像的細節,圖像銳利後就會有提升解析度的感覺。 拉普拉斯運算子是一種常用於影像增強的方法之一,特別是用於提高影像的邊緣和細節。 在OpenCV中,你可以使用cv2.Laplacian函數來應用拉普拉斯運算子。
Thumbnail
在影像處理中,我們總是想要讓特徵更加明顯一點,可以使用銳利化的方式將特徵的邊緣增強,提升影像的細節,圖像銳利後就會有提升解析度的感覺。 拉普拉斯運算子是一種常用於影像增強的方法之一,特別是用於提高影像的邊緣和細節。 在OpenCV中,你可以使用cv2.Laplacian函數來應用拉普拉斯運算子。
Thumbnail
直方圖均衡化處理是一種通過調整圖像的直方圖來改變圖像外觀和質量的圖像處理技術。這通常涉及對圖像的亮度、對比度和顏色分佈進行調整 此方法對於背景和前景均亮或均暗的影像很有用。​並在曝光過度或曝光不足的照片中獲得更好的細節。
Thumbnail
直方圖均衡化處理是一種通過調整圖像的直方圖來改變圖像外觀和質量的圖像處理技術。這通常涉及對圖像的亮度、對比度和顏色分佈進行調整 此方法對於背景和前景均亮或均暗的影像很有用。​並在曝光過度或曝光不足的照片中獲得更好的細節。
Thumbnail
直方圖是對圖像中像素強度分布的圖形表示。通過分析直方圖,我們可以獲得有關圖像對比度、亮度和色彩分佈的有用信息。
Thumbnail
直方圖是對圖像中像素強度分布的圖形表示。通過分析直方圖,我們可以獲得有關圖像對比度、亮度和色彩分佈的有用信息。
Thumbnail
涉及圖像處理和計算機視覺時,色彩空間轉換是一個常見操作,應用如下: 降維: 將一張彩色圖像轉換為灰度圖像可以減少數據的維度,簡化處理過程,同時在某些情況下保留重要的視覺信息。 突顯特徵: 在某些情況下,某些色彩通道可能包含冗餘或不必要的信息,通過轉換到其他色彩空間,可以更好地突顯圖像中的重要特徵
Thumbnail
涉及圖像處理和計算機視覺時,色彩空間轉換是一個常見操作,應用如下: 降維: 將一張彩色圖像轉換為灰度圖像可以減少數據的維度,簡化處理過程,同時在某些情況下保留重要的視覺信息。 突顯特徵: 在某些情況下,某些色彩通道可能包含冗餘或不必要的信息,通過轉換到其他色彩空間,可以更好地突顯圖像中的重要特徵
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News