欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV圖像形態(tài)學(xué)的實(shí)現(xiàn)

 更新時(shí)間:2025年04月14日 09:57:33   作者:2201_75491841  
本文主要介紹了OpenCV圖像形態(tài)學(xué)的實(shí)現(xiàn),包括腐蝕、膨脹、開(kāi)運(yùn)算、閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算和黑帽運(yùn)算,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在圖像處理領(lǐng)域,圖像形態(tài)學(xué)是一種基于形狀進(jìn)行圖像分析的有力工具,廣泛應(yīng)用于圖像分割、特征提取、邊緣檢測(cè)、圖像降噪等多個(gè)方面。借助 OpenCV 這個(gè)強(qiáng)大的計(jì)算機(jī)視覺(jué)庫(kù),我們可以輕松實(shí)現(xiàn)各種圖像形態(tài)學(xué)操作。本文將深入探討圖像形態(tài)學(xué)的基本原理,并結(jié)合 OpenCV 的代碼示例,介紹腐蝕、膨脹、開(kāi)運(yùn)算、閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算和黑帽運(yùn)算等常見(jiàn)的形態(tài)學(xué)操作。

一、圖像形態(tài)學(xué)簡(jiǎn)介

圖像形態(tài)學(xué)以數(shù)學(xué)形態(tài)學(xué)為基礎(chǔ),通過(guò)對(duì)圖像中的像素進(jìn)行特定的集合運(yùn)算,改變圖像中物體的形狀和結(jié)構(gòu)。其核心操作是使用一個(gè)稱為結(jié)構(gòu)元素(也叫核)的小矩陣,在圖像上滑動(dòng),對(duì)每個(gè)像素及其鄰域進(jìn)行操作,從而實(shí)現(xiàn)對(duì)圖像的處理。在 OpenCV 中,提供了豐富的函數(shù)和工具,幫助我們進(jìn)行各種圖像形態(tài)學(xué)處理。

二、腐蝕(Erosion)

1. 原理

腐蝕是一種基本的圖像形態(tài)學(xué)操作,其作用是 “收縮” 或 “細(xì)化” 圖像中的物體。具體來(lái)說(shuō),腐蝕操作以結(jié)構(gòu)元素為模板,對(duì)圖像中的每個(gè)像素進(jìn)行檢查。如果結(jié)構(gòu)元素覆蓋的所有像素都為 1(對(duì)于二值圖像而言),則中心像素保持不變,否則中心像素被設(shè)置為 0。通俗地講,腐蝕操作會(huì)將物體的邊界向內(nèi)部收縮,從而去除圖像中的一些小的噪聲點(diǎn)和毛刺。例如,對(duì)于一個(gè)白色物體在黑色背景上的二值圖像,腐蝕操作會(huì)使白色物體的面積變小。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,使用cv2.erode()函數(shù)實(shí)現(xiàn)腐蝕操作。該函數(shù)的第一個(gè)參數(shù)為輸入圖像,第二個(gè)參數(shù)為結(jié)構(gòu)元素,第三個(gè)參數(shù)為迭代次數(shù)(可選,默認(rèn)為 1)。下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)展示如何使用cv2.erode()進(jìn)行腐蝕操作:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行腐蝕操作
eroded = cv2.erode(img, kernel, iterations = 1)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(eroded, cmap = 'gray'), plt.title('Eroded')
plt.xticks([]), plt.yticks([])
plt.show()

三、膨脹(Dilation)

1. 原理

膨脹是與腐蝕相反的操作,其作用是 “擴(kuò)展” 或 “加粗” 圖像中的物體。膨脹操作同樣以結(jié)構(gòu)元素為模板,對(duì)圖像中的每個(gè)像素進(jìn)行檢查。只要結(jié)構(gòu)元素覆蓋的像素中有一個(gè)為 1(對(duì)于二值圖像而言),則中心像素被設(shè)置為 1。膨脹操作可以填補(bǔ)圖像中的小空洞,連接斷裂的物體,擴(kuò)大物體的面積。例如,在檢測(cè)物體輪廓時(shí),膨脹操作可以幫助我們更完整地獲取物體的輪廓。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,使用cv2.dilate()函數(shù)實(shí)現(xiàn)膨脹操作。該函數(shù)的參數(shù)與cv2.erode()類似,第一個(gè)參數(shù)為輸入圖像,第二個(gè)參數(shù)為結(jié)構(gòu)元素,第三個(gè)參數(shù)為迭代次數(shù)(可選,默認(rèn)為 1)。下面是使用cv2.dilate()進(jìn)行膨脹操作的示例代碼:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行膨脹操作
dilated = cv2.dilate(img, kernel, iterations = 1)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(dilated, cmap = 'gray'), plt.title('Dilated')
plt.xticks([]), plt.yticks([])
plt.show()

四、開(kāi)運(yùn)算(Opening)

1. 原理

開(kāi)運(yùn)算由腐蝕和膨脹兩個(gè)操作組成,先對(duì)圖像進(jìn)行腐蝕操作,再進(jìn)行膨脹操作。開(kāi)運(yùn)算可以去除圖像中的小噪聲點(diǎn),平滑物體的輪廓,斷開(kāi)狹窄的連接,而不會(huì)明顯改變物體的面積。對(duì)于含有噪聲的二值圖像,開(kāi)運(yùn)算能夠有效地去除噪聲,保留主要的物體結(jié)構(gòu)。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,使用cv2.morphologyEx()函數(shù)并指定操作類型為cv2.MORPH_OPEN來(lái)實(shí)現(xiàn)開(kāi)運(yùn)算。該函數(shù)的第一個(gè)參數(shù)為輸入圖像,第二個(gè)參數(shù)為操作類型,第三個(gè)參數(shù)為結(jié)構(gòu)元素。以下是實(shí)現(xiàn)開(kāi)運(yùn)算的示例代碼:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行開(kāi)運(yùn)算
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(opened, cmap = 'gray'), plt.title('Opened')
plt.xticks([]), plt.yticks([])
plt.show()

五、閉運(yùn)算(Closing)

1. 原理

閉運(yùn)算同樣由腐蝕和膨脹兩個(gè)操作組成,但順序與開(kāi)運(yùn)算相反,先進(jìn)行膨脹操作,再進(jìn)行腐蝕操作。閉運(yùn)算可以填補(bǔ)物體內(nèi)部的小空洞,連接鄰近的物體,平滑物體的輪廓,同時(shí)保持物體的整體形狀和面積。在處理含有孔洞的物體圖像時(shí),閉運(yùn)算能夠有效地填補(bǔ)孔洞,使物體的形狀更加完整。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,使用cv2.morphologyEx()函數(shù)并指定操作類型為cv2.MORPH_CLOSING來(lái)實(shí)現(xiàn)閉運(yùn)算。示例代碼如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行閉運(yùn)算
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSING, kernel)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(closed, cmap = 'gray'), plt.title('Closed')
plt.xticks([]), plt.yticks([])
plt.show()

六、梯度運(yùn)算(Morphological Gradient)

1. 原理

形態(tài)學(xué)梯度運(yùn)算通過(guò)膨脹和腐蝕操作的差值來(lái)獲取圖像中物體的輪廓。具體來(lái)說(shuō),梯度運(yùn)算的結(jié)果等于膨脹后的圖像減去腐蝕后的圖像。這樣可以突出圖像中物體的邊緣,使物體的輪廓更加明顯。形態(tài)學(xué)梯度運(yùn)算常用于邊緣檢測(cè)和物體形狀的提取。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,使用cv2.morphologyEx()函數(shù)并指定操作類型為cv2.MORPH_GRADIENT來(lái)實(shí)現(xiàn)梯度運(yùn)算。示例代碼如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行梯度運(yùn)算
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(gradient, cmap = 'gray'), plt.title('Gradient')
plt.xticks([]), plt.yticks([])
plt.show()

七、頂帽運(yùn)算(Top - Hat)

1. 原理

頂帽運(yùn)算,也叫禮帽運(yùn)算,其結(jié)果為原始圖像與圖像開(kāi)運(yùn)算的差值。即頂帽圖像 = 原始圖像 - 開(kāi)運(yùn)算圖像。開(kāi)運(yùn)算會(huì)平滑物體輪廓、去除小噪聲,但也會(huì)使圖像中較亮的部分有所損失。頂帽運(yùn)算能夠分離出比鄰近點(diǎn)亮一些的斑塊,突出圖像中的微小細(xì)節(jié),在提取圖像中的明亮區(qū)域或噪聲方面非常有用。例如,在文本檢測(cè)中,頂帽運(yùn)算可以幫助突出文本的細(xì)節(jié)。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,通過(guò)cv2.morphologyEx()函數(shù)并指定操作類型為cv2.MORPH_TOPHAT來(lái)實(shí)現(xiàn)頂帽運(yùn)算。下面是實(shí)現(xiàn)頂帽運(yùn)算的代碼示例:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行頂帽運(yùn)算
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(tophat, cmap = 'gray'), plt.title('Top - Hat')
plt.xticks([]), plt.yticks([])
plt.show()

八、黑帽運(yùn)算(Black - Hat)

1. 原理

黑帽運(yùn)算與頂帽運(yùn)算相對(duì),其結(jié)果為圖像閉運(yùn)算與原始圖像的差值。即黑帽圖像 = 閉運(yùn)算圖像 - 原始圖像。閉運(yùn)算能夠填補(bǔ)物體內(nèi)部的小空洞、連接鄰近物體。黑帽運(yùn)算有助于分離出比鄰近點(diǎn)暗一些的斑塊,突出圖像中相對(duì)較暗的區(qū)域,在檢測(cè)圖像中的暗細(xì)節(jié)或背景特征時(shí)十分有效。比如在檢測(cè)深色物體時(shí),黑帽運(yùn)算能幫助增強(qiáng)物體的特征。

2. OpenCV 實(shí)現(xiàn)

在 OpenCV 中,通過(guò)cv2.morphologyEx()函數(shù)并指定操作類型為cv2.MORPH_BLACKHAT來(lái)實(shí)現(xiàn)黑帽運(yùn)算。代碼示例如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 讀取圖像并轉(zhuǎn)換為灰度圖
img = cv2.imread('test.jpg', 0)
# 創(chuàng)建結(jié)構(gòu)元素,這里使用5x5的矩形結(jié)構(gòu)元素
kernel = np.ones((5, 5), np.uint8)
# 進(jìn)行黑帽運(yùn)算
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
# 顯示結(jié)果
plt.subplot(121), plt.imshow(img, cmap = 'gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(blackhat, cmap = 'gray'), plt.title('Black - Hat')
plt.xticks([]), plt.yticks([])
plt.show()

九、總結(jié)

本文詳細(xì)介紹了 OpenCV 中的圖像形態(tài)學(xué)處理技術(shù),包括腐蝕、膨脹、開(kāi)運(yùn)算、閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算和黑帽運(yùn)算。每種操作都有其獨(dú)特的原理和適用場(chǎng)景。腐蝕和膨脹是基礎(chǔ)操作,開(kāi)運(yùn)算、閉運(yùn)算、頂帽運(yùn)算和黑帽運(yùn)算基于它們組合而成,用于不同的圖像特征提取與處理。梯度運(yùn)算則專注于突出物體邊緣。在實(shí)際應(yīng)用中,我們可以根據(jù)圖像的特點(diǎn)和處理需求,靈活組合這些形態(tài)學(xué)操作,達(dá)到最佳的處理效果。

到此這篇關(guān)于OpenCV圖像形態(tài)學(xué)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)OpenCV圖像形態(tài)學(xué)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)將range()函數(shù)生成的數(shù)字存儲(chǔ)在一個(gè)列表中

    python實(shí)現(xiàn)將range()函數(shù)生成的數(shù)字存儲(chǔ)在一個(gè)列表中

    這篇文章主要介紹了python實(shí)現(xiàn)將range()函數(shù)生成的數(shù)字存儲(chǔ)在一個(gè)列表中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python利用re,bs4,requests模塊獲取股票數(shù)據(jù)

    python利用re,bs4,requests模塊獲取股票數(shù)據(jù)

    這篇文章主要介紹了python利用re,bs4,requests模塊獲取股票數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解Python中的from..import絕對(duì)導(dǎo)入語(yǔ)句

    詳解Python中的from..import絕對(duì)導(dǎo)入語(yǔ)句

    絕對(duì)導(dǎo)入其實(shí)非常簡(jiǎn)單,即是用from語(yǔ)句在import前指明頂層package名,下面我們通過(guò)兩個(gè)例子來(lái)詳解Python中的from..import絕對(duì)導(dǎo)入語(yǔ)句
    2016-06-06
  • django基于cors解決跨域請(qǐng)求問(wèn)題詳解

    django基于cors解決跨域請(qǐng)求問(wèn)題詳解

    這篇文章主要介紹了django基于cors解決跨域請(qǐng)求問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python 調(diào)用 Outlook 發(fā)送郵件過(guò)程解析

    Python 調(diào)用 Outlook 發(fā)送郵件過(guò)程解析

    這篇文章主要介紹了Python 調(diào)用 Outlook 發(fā)送郵件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • django model object序列化實(shí)例

    django model object序列化實(shí)例

    這篇文章主要介紹了django model object序列化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • python如何實(shí)現(xiàn)int函數(shù)的方法示例

    python如何實(shí)現(xiàn)int函數(shù)的方法示例

    int()函數(shù)常用來(lái)把其他類型轉(zhuǎn)換為整數(shù),下面這篇文章主要給大家介紹了關(guān)于python如何實(shí)現(xiàn)int函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Python return語(yǔ)句如何實(shí)現(xiàn)結(jié)果返回調(diào)用

    Python return語(yǔ)句如何實(shí)現(xiàn)結(jié)果返回調(diào)用

    這篇文章主要介紹了Python return語(yǔ)句如何實(shí)現(xiàn)結(jié)果返回調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例

    實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例

    在本篇文章里小編給大家整理的是一篇關(guān)于實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-09-09
  • python Django中models進(jìn)行模糊查詢的示例

    python Django中models進(jìn)行模糊查詢的示例

    今天小編就為大家分享一篇python Django中models進(jìn)行模糊查詢的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論