0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV入門(mén)之OpenCV的基本操作5

jf_78858299 ? 來(lái)源:DL INtoOUT ? 作者:AN ? 2023-02-07 14:35 ? 次閱讀

9、形態(tài)學(xué)操作: 腐蝕、膨脹、開(kāi)運(yùn)算、閉運(yùn)算、頂帽、黑帽

利用一種特殊的結(jié)構(gòu)(卷積核)來(lái)測(cè)量或提取輸入圖像中對(duì)應(yīng)的形狀或特征以便進(jìn)一步圖像分析和識(shí)別,基本都是對(duì)二進(jìn)制圖像進(jìn)行處理。

基本操作:膨脹和腐蝕,開(kāi)運(yùn)算、閉運(yùn)算、頂帽、黑帽

腐蝕操作 ,用卷積核掃描圖像,一般都為1,如果圖像內(nèi)卷積核范圍內(nèi)全是白的(255),那255保留,如果卷積核范圍內(nèi)有黑的(0),那么該范圍都變?yōu)楹诘模?)。

膨脹操作 ,與腐蝕操作相反,只要保證卷積核的錨點(diǎn)是非0值(255),周邊無(wú)論是0還是非0,都變成非0值(255)。

開(kāi)運(yùn)算 :腐蝕+膨脹,去除外部噪聲,去除白點(diǎn)。

閉運(yùn)算 :膨脹+腐蝕,去除內(nèi)部噪聲,去除黑點(diǎn)。

頂帽操作 :原圖-開(kāi)運(yùn)算,得到外部去掉的噪聲。

因?yàn)殚_(kāi)運(yùn)算帶來(lái)的結(jié)果是放大了裂縫或者局部低亮度的區(qū)域,因此,從原圖中減去開(kāi)運(yùn)算后的圖,得到的效果圖突出了比原圖輪廓周?chē)膮^(qū)域更明亮的區(qū)域,且這一操作和選擇的核的大小相關(guān)。

頂帽運(yùn)算往往用來(lái)分離比鄰近點(diǎn)亮一些的斑塊。當(dāng)一幅圖像具有大幅的背景的時(shí)候,而微小物品比較有規(guī)律的情況下,可以使用頂帽運(yùn)算進(jìn)行背景提取。

黑帽操作 :原圖-閉運(yùn)算,得到內(nèi)部去掉的噪聲。

黑帽運(yùn)算后的效果圖突出了比原圖輪廓周?chē)膮^(qū)域更暗的區(qū)域,且這一操作和選擇的核的大小相關(guān)。

所以,黑帽運(yùn)算用來(lái)分離比鄰近點(diǎn)暗一些的斑塊??梢缘玫捷喞Ч麍D。

形態(tài)學(xué)梯度 :圖像膨脹與腐蝕的差別。結(jié)果看上去就像前景物體的輪廓。

基本梯度 :膨脹后圖像減去腐蝕后圖像得到的差值圖像。

內(nèi)部梯度 :用原圖減去腐蝕圖像得到的差值圖像。

外部梯度 :膨脹后圖像減去原圖像得到的差值圖像。

morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

src:輸入圖像

op:操作類(lèi)型

MORTH_OPEN:函數(shù)做開(kāi)運(yùn)算

MORTH_CLOSE:函數(shù)做閉運(yùn)算

MORTH_GRADIENT:函數(shù)做形態(tài)學(xué)梯度運(yùn)算

MORTH_TOPHAT:函數(shù)做頂帽運(yùn)算

MORTH_BLACKHAT:函數(shù)做黑帽運(yùn)算

MORTH_DILATE :函數(shù)做膨脹運(yùn)算

MORTH_ERODE:函數(shù)做腐蝕運(yùn)算

kernel :內(nèi)核類(lèi)型,用getStructuringElement函數(shù)得到

def Morphology():
    # morphology 形態(tài)學(xué)
    # 利用一種特殊的結(jié)構(gòu)(卷積核)來(lái)測(cè)量或提取輸入圖像中對(duì)應(yīng)的形狀或特征
    # 以便進(jìn)一步圖像分析和識(shí)別,基本都是對(duì)二進(jìn)制圖像進(jìn)行處理
    # 基本操作:膨脹和腐蝕,開(kāi)運(yùn)算、閉運(yùn)算、頂帽、黑帽
    # 圖像全局二值化,將每個(gè)像素轉(zhuǎn)換為兩種值(0,255)
    img = cv2.imread('./images/bank.png')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)


    # 返回兩個(gè)值,閾值和處理后的圖片,大于thresh(127)全是白的255
    # THRESH_BINARY 二進(jìn)制閾值化 -> 大于閾值為1,小于閾值為0
    # THRESH_BINARY_INV 反二進(jìn)制閾值化 -> 大于閾值為0,小于閾值為1
    # THRESH_TRUNC 截?cái)嚅撝祷?-> 大于閾值為閾值,小于閾值不變
    # THRESH_TOZERO 閾值化為0 -> 大于閾值的不變,小于閾值的全為0
    # THRESH_TOZERO_INV 反閾值化為0 -> 大于閾值為0,小于閾值不變
    # thresh,img_bw = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
    # 自適應(yīng)閾值二值化 閾值是根據(jù)圖像上的每一個(gè)小區(qū)域計(jì)算與其對(duì)應(yīng)的閾值。
    # ADAPTIVE_THRESH_MEAN_C(通過(guò)平均的方法取得平均值)———閾值取自相鄰區(qū)域的平均值)
    # ADAPTIVE_THRESH_GAUSSIAN_C(通過(guò)高斯取得高斯值)———閾值取自相鄰區(qū)域的加權(quán)和
    # blockSize Int類(lèi)型的,這個(gè)值來(lái)決定像素的鄰域塊有多大。
    # C:偏移值調(diào)整量,計(jì)算adaptiveMethod用到的參數(shù)。
    img_bw = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,0)


    # 獲取形態(tài)學(xué)卷積核
    # cv2.MORPH_ELLIPSE 橢圓,cv2.MORPH_RECT 矩形,cv2.MORPH_CROSS 十字架
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))
    # kernel = np.ones((3, 3), np.uint8)
    # 腐蝕操作,用卷積核掃描圖像,一般都為1,如果圖像內(nèi)卷積核范圍內(nèi)全是白的,那掃后為白的
    # iterations 為迭代次數(shù)
    img_erode = cv2.erode(img_bw,kernel,iterations=2)


    # 膨脹操作,與腐蝕操作相反,只要保證卷積核的錨點(diǎn)是非0值(白的),周邊無(wú)論是0還是非0,都變成非0值
    img_dilate = cv2.dilate(img_bw,kernel)


    # 開(kāi)運(yùn)算:腐蝕?膨脹,去除外部噪聲,去除白點(diǎn)
    # 閉運(yùn)算:膨脹?腐蝕,去除內(nèi)部噪聲,去除黑點(diǎn)
    open_operate = cv2.morphologyEx(img_bw,cv2.MORPH_OPEN,kernel,iterations=2)
    close_operate = cv2.morphologyEx(img_bw,cv2.MORPH_CLOSE,kernel,iterations=2)


    # 形態(tài)學(xué)的梯度,:原圖-腐蝕,得到腐蝕掉的部分,即邊
    img_grad = cv2.morphologyEx(img_bw,cv2.MORPH_GRADIENT,kernel)


    # 頂帽操作:原圖-開(kāi)運(yùn)算,得到外部去掉的噪聲
    img_tophat = cv2.morphologyEx(gray,cv2.MORPH_TOPHAT,kernel)

    # 黑帽操作:原圖-閉運(yùn)算,得到內(nèi)部去掉的噪聲
    img_blackhat = cv2.morphologyEx(gray,cv2.MORPH_BLACKHAT,kernel)


    cv2.imshow("imshow",img_tophat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

運(yùn)行結(jié)果

原圖&二值化

腐蝕&膨脹

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    182

    文章

    2960

    瀏覽量

    230045
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1279

    瀏覽量

    56587
  • 計(jì)算機(jī)視覺(jué)

    關(guān)注

    8

    文章

    1695

    瀏覽量

    45905
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    625

    瀏覽量

    41218
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenCV_編程簡(jiǎn)介(入門(mén)必讀)

    opencv編程簡(jiǎn)介,入門(mén)必讀,適合新手簡(jiǎn)單了解opencv的相關(guān)知識(shí)。
    發(fā)表于 03-21 13:49 ?11次下載

    基本閾值操作_《OpenCV3編程入門(mén)》書(shū)本配套源代碼

    OpenCV3編程入門(mén)》書(shū)本配套源代碼:基本閾值操作
    發(fā)表于 06-06 15:39 ?8次下載

    基本鼠標(biāo)操作_《OpenCV3編程入門(mén)》書(shū)本配套源代碼

    OpenCV3編程入門(mén)》書(shū)本配套源代碼:基本鼠標(biāo)操作
    發(fā)表于 06-06 15:39 ?5次下載

    OpenCV進(jìn)行基本繪圖_《OpenCV3編程入門(mén)》書(shū)本配套源

    OpenCV3編程入門(mén)》書(shū)本配套源代碼:用OpenCV進(jìn)行基本繪圖
    發(fā)表于 05-11 16:46 ?36次下載

    支持向量機(jī)SVM引導(dǎo)_《OpenCV3編程入門(mén)》書(shū)本配套源代碼

    OpenCV3編程入門(mén)》書(shū)本配套源代碼:支持向量機(jī)SVM引導(dǎo)
    發(fā)表于 06-06 15:52 ?2次下載

    OpenCV3編程入門(mén)-源碼例程全集-OpenCV開(kāi)發(fā)環(huán)境的配置

    OpenCV3編程入門(mén)-源碼例程全集-OpenCV開(kāi)發(fā)環(huán)境的配置,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:27 ?20次下載

    OpenCV3編程入門(mén)-源碼例程全集-基本閾值操作

    OpenCV3編程入門(mén)-源碼例程全集-基本閾值操作,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:55 ?0次下載

    OpenCV3編程入門(mén)-源碼例程全集-基本鼠標(biāo)操作

    OpenCV3編程入門(mén)-源碼例程全集-基本鼠標(biāo)操作,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:55 ?0次下載

    支持向量機(jī)SVM引導(dǎo)_OpenCV3編程入門(mén)-源碼例程

    OpenCV3編程入門(mén)-源碼例程全集-支持向量機(jī)SVM引導(dǎo),感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?1次下載

    OpenCV進(jìn)行基本繪圖_OpenCV3編程入門(mén)-源碼例程

    OpenCV3編程入門(mén)-源碼例程全集-用OpenCV進(jìn)行基本繪圖,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?3次下載

    OpenCV入門(mén)OpenCV的基本操作1

    OpenCV是一個(gè)基于Apache2.0許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:19 ?729次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>1

    OpenCV入門(mén)OpenCV的基本操作2

    OpenCV是一個(gè)基于Apache2.0許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:19 ?796次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>2

    OpenCV入門(mén)OpenCV的基本操作實(shí)戰(zhàn)代碼

    OpenCV是一個(gè)基于Apache2.0許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:24 ?745次閱讀

    OpenCV入門(mén)OpenCV的基本操作3

    OpenCV是一個(gè)基于Apache2.0許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:33 ?577次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>3

    OpenCV入門(mén)OpenCV的基本操作4

    OpenCV是一個(gè)基于Apache2.0許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:34 ?571次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>4