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

OpenCV-Python實(shí)現(xiàn)通用形態(tài)學(xué)函數(shù)

 更新時(shí)間:2021年06月11日 11:15:37   作者:一天一篇Python庫(kù)  
本文將結(jié)合實(shí)例代碼,介紹OpenCV-Python實(shí)現(xiàn)通用形態(tài)學(xué)函數(shù),包含開(kāi)運(yùn)算,閉運(yùn)算等復(fù)雜的形態(tài)學(xué)運(yùn)算,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

通用形態(tài)學(xué)函數(shù)

上篇博文,我們介紹了形態(tài)學(xué)的基礎(chǔ)腐蝕與膨脹操作,而將腐蝕與膨脹結(jié)合起來(lái)進(jìn)行組合,我們就能實(shí)現(xiàn)開(kāi)運(yùn)算,閉運(yùn)算等復(fù)雜的形態(tài)學(xué)運(yùn)算。

在OpenCV中,它給我們提供的通用形態(tài)學(xué)函數(shù)為cv2.morphologyEx(),其完整定義如下:

def morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None): 

這些參數(shù)基本前面都介紹過(guò),不過(guò)有一點(diǎn)需要說(shuō)明,src原始圖像必須是CV_8U,CV_16U,CV_16S,CV_32F,CV_64F中的一種。

當(dāng)然,這里面還有一個(gè)陌生的參數(shù)就是op,它就是各種形態(tài)學(xué)的類(lèi)別,具體類(lèi)別如表所示:

類(lèi)型 說(shuō)明 意義 操作
cv2.MORPH_ERODE 腐蝕 腐蝕 erode()
cv2.MORPH_DILATE 膨脹 膨脹 dilate()
cv2.MORPH_OPEN 開(kāi)運(yùn)算 先腐蝕后膨脹 dilate(erode())
cv2.MORPH_CLOSE 閉運(yùn)算 先膨脹后腐蝕 erode(dilate())
cv2.MORPH_GRADIENT 形態(tài)學(xué)梯度運(yùn)算 膨脹圖減腐蝕圖 dilate()-erode()
cv2.MORPH_TOPHAT 頂帽運(yùn)算 原始圖像減開(kāi)運(yùn)算所得圖像 src-open()
cv2.MORPH_BLACKHAT 黑帽運(yùn)算 閉運(yùn)算所得圖像減原始圖像 close()-src
cv2.MORPH_HITMISS 擊中擊不中 前景背景腐蝕運(yùn)算的交集。僅僅支持CV8UC1二進(jìn)制圖像 intersection(erode(src),erode(src1))

開(kāi)運(yùn)算

如上表所示,開(kāi)運(yùn)算是將原圖像腐蝕,再對(duì)其進(jìn)行膨脹操作。主要用于去噪,計(jì)數(shù)等。去噪我們已經(jīng)通過(guò)上面的腐蝕操作就可以完成,下面我們來(lái)實(shí)現(xiàn)有趣的計(jì)數(shù)操作。

import cv2
import numpy as np

img = cv2.imread("open.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9), np.float32)
result = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=5)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,我們能將不同區(qū)域劃分開(kāi)來(lái),效果如下:

開(kāi)運(yùn)算

閉運(yùn)算

閉運(yùn)算是先膨脹后腐蝕的運(yùn)算,它有助于關(guān)閉前景物體內(nèi)部的小孔,或去除物體上的小黑點(diǎn),還可以將不同的前景圖像進(jìn)行連接。下面,我們就將上圖進(jìn)行連接。

import cv2
import numpy as np

img = cv2.imread("close.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((10, 10), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=7)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,兩個(gè)方塊就連接為一個(gè)整體了,效果如下所示:

閉運(yùn)算

形態(tài)學(xué)梯度運(yùn)算

形態(tài)學(xué)梯度運(yùn)算是用圖像膨脹后的圖像減去腐蝕圖像的運(yùn)算,該操作可以獲取原始圖像中的前景圖像的邊緣。我們還是用上篇膨脹的圖來(lái)測(cè)試,代碼如下:

import cv2
import numpy as np

img = cv2.imread("8.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((5, 5), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel,iterations=2)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,我們的圖像就中空了,效果如下:

形態(tài)學(xué)梯度運(yùn)算

頂帽運(yùn)算

頂帽運(yùn)算是用原始圖像減去其開(kāi)運(yùn)算圖像的操作。它能夠獲取圖像的噪聲信息,或者得到比原圖像的邊緣更亮的邊緣信息。也就是獲取上圖中的白色線(xiàn)條,具體代碼如下:

import cv2
import numpy as np

img = cv2.imread("8.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((5, 5), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel,iterations=2)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,效果如下:

頂帽運(yùn)算

黑帽運(yùn)算

黑帽運(yùn)算是用閉運(yùn)算圖像減去原始圖像的操作。它能夠獲取內(nèi)部的小孔,或前景色中的小黑點(diǎn),亦或者得到比原始圖像的邊緣更暗的邊緣部分。這里,我們用前面的人物圖像,代碼如下:

import cv2
import numpy as np

img = cv2.imread("4.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((5, 5), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel,iterations=2)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,效果如下:

黑帽運(yùn)算

結(jié)構(gòu)元函數(shù)

前面我們介紹過(guò),結(jié)構(gòu)元可以自定義,也可以通過(guò)cv2.getStructuringElement()函數(shù)生成。這里,我們來(lái)看看其完整的定義:

def getStructuringElement(shape, ksize, anchor=None): 

shape:形狀類(lèi)型,取值如下表:

類(lèi)型 意義
cv2.MORPH_RECT 矩形結(jié)構(gòu)元,所有元素值為1
cv2.MORPH_CROSS 十字形結(jié)構(gòu)元,對(duì)角線(xiàn)元素值為1
cv2.MORPH_ELLIPSE 橢圓形結(jié)構(gòu)元素

ksize:結(jié)構(gòu)元的大小

anchor:結(jié)構(gòu)元的錨點(diǎn)位置,默認(rèn)值(-1,1),是形狀的中心。只有十字星型的形狀與錨點(diǎn)位置緊密聯(lián)系。在其他情況下,錨點(diǎn)位置僅用于形態(tài)學(xué)運(yùn)算結(jié)果的調(diào)整。

下面,我們將這三種形狀類(lèi)型都實(shí)現(xiàn)一遍,具體代碼如下:

import cv2

img = cv2.imread("open.jpg", cv2.IMREAD_UNCHANGED)
kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT,(50,50))
kernel2 = cv2.getStructuringElement(cv2.MORPH_CROSS,(50,50))
kernel3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(50,50))
result1 = cv2.dilate(img,kernel1)
result2 = cv2.dilate(img,kernel2)
result3 = cv2.dilate(img,kernel3)
cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
cv2.imshow("result3", result3)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,效果如下所示:

結(jié)構(gòu)元函數(shù)

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

相關(guān)文章

  • Python實(shí)現(xiàn)迪杰斯特拉算法過(guò)程解析

    Python實(shí)現(xiàn)迪杰斯特拉算法過(guò)程解析

    這篇文章主要介紹了Python實(shí)現(xiàn)迪杰斯特拉算法過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • pydev debugger: process 10341 is connecting無(wú)法debu的解決

    pydev debugger: process 10341 is co

    這篇文章主要介紹了pydev debugger: process 10341 is connecting無(wú)法debu的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • python人工智能tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN

    python人工智能tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN

    學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)已經(jīng)有一段時(shí)間,從普通的BP神經(jīng)網(wǎng)絡(luò)到LSTM長(zhǎng)短期記憶網(wǎng)絡(luò)都有一定的了解,但是從未系統(tǒng)的把整個(gè)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)記錄下來(lái),我相信這些小記錄可以幫助我更加深刻的理解神經(jīng)網(wǎng)絡(luò)
    2022-05-05
  • Django QuerySet查詢(xún)集原理及代碼實(shí)例

    Django QuerySet查詢(xún)集原理及代碼實(shí)例

    這篇文章主要介紹了Django QuerySet查詢(xún)集原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python Requests安裝與簡(jiǎn)單運(yùn)用

    Python Requests安裝與簡(jiǎn)單運(yùn)用

    requests是python的一個(gè)HTTP客戶(hù)端庫(kù),跟urllib,urllib2類(lèi)似,那為什么要用requests而不用urllib2呢?帶著這個(gè)問(wèn)題來(lái)一起學(xué)習(xí)本教程吧
    2016-04-04
  • 對(duì)python 多個(gè)分隔符split 的實(shí)例詳解

    對(duì)python 多個(gè)分隔符split 的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python 多個(gè)分隔符split 的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python tkinter實(shí)現(xiàn)日期選擇器

    Python tkinter實(shí)現(xiàn)日期選擇器

    這篇文章主要為大家詳細(xì)介紹了Python tkinter實(shí)現(xiàn)日期選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • jupyter notebook運(yùn)行代碼沒(méi)反應(yīng)且in[ ]沒(méi)有*

    jupyter notebook運(yùn)行代碼沒(méi)反應(yīng)且in[ ]沒(méi)有*

    本文主要介紹了jupyter notebook運(yùn)行代碼沒(méi)反應(yīng)且in[ ]沒(méi)有*,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • PyQt5每天必學(xué)之組合框

    PyQt5每天必學(xué)之組合框

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之組合框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python pygame入門(mén)教程

    python pygame入門(mén)教程

    pygame是python的游戲編程模塊,今天我們就來(lái)一起簡(jiǎn)單的學(xué)習(xí)如何使用該模塊
    2021-06-06

最新評(píng)論