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

Python?OpenCV形態(tài)學(xué)運算示例詳解

 更新時間:2022年04月07日 15:55:31   作者:侯小啾  
這篇文章主要為大家介紹了OpenCV中的幾個形態(tài)學(xué)運算,例如:腐蝕&膨脹、開&閉運算、梯度運算、頂帽運算黑帽運算,感興趣的可以了解一下

1. 腐蝕 & 膨脹

1.1什么是腐蝕&膨脹

腐蝕&膨脹是圖像形態(tài)學(xué)中的兩種核心操作

腐蝕可以描述為是讓圖像沿著自己的邊界向內(nèi)收縮

而膨脹則剛好與收縮相反,可以描述為是讓圖像沿著邊界向內(nèi)擴(kuò)張。

這兩種操作的邏輯和作用都和上篇講到的使用濾波器做平滑處理有些類似,不同之處在于,腐蝕求的是濾波核內(nèi)像素的最小值,而膨脹求的是最大值。并將計算出的值復(fù)制給錨點位置的像素。

作用上同平滑處理類似,可以消除噪聲。

因為腐蝕求的是最小值,膨脹求的是最大值,所以經(jīng)過腐蝕操作的圖像的總體亮度會有所降低,而經(jīng)過膨脹操作的圖像的總體亮度會有所升高。

為方便示例,準(zhǔn)備以下圖片素材(test1.jpg):

1.2 腐蝕方法 cv2.erode()

python中OpenCV使用cv2.erode()方法實現(xiàn)腐蝕操作。

該方法語法如下:

cv2.erode(src, kernel, anchor=None, iterations=None, borderType=None, borderValue=None)

  • scr 原圖像
  • kernel 腐蝕要用到的核
  • anchor 錨點
  • iterations 可選參數(shù),腐蝕操作的迭代次數(shù),默認(rèn)為1。
  • borderType 邊界樣式,可選。
  • borderValue 邊界值,可選。

其中kernel這個參數(shù),核,需要手動取創(chuàng)建一個數(shù)組,而不能是像濾波器那樣指定一個大小。

import cv2
import numpy as np
img = cv2.imread("test1.jpg")
# 創(chuàng)建3*3的數(shù)組作為濾波核
k = np.ones((3, 3), np.uint8)
dst = cv2.erode(img, k)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

腐蝕效果如下,如圖,我們的魚骨顯得年代更久遠(yuǎn)了,魚刺消失、變暗了相當(dāng)一部分。

1.3 膨脹方法 cv2.dilate()

python中OpenCV使用cv2.dilate()方法實現(xiàn)膨脹操作。

該方法語法如下:

dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

可以看出,其參數(shù)用法同cv2.erode()的參數(shù)。

import cv2
import numpy as np
img = cv2.imread("test1.jpg")
# 創(chuàng)建16*16的數(shù)組作為核
k = np.ones((16, 16), np.uint8)
dst = cv2.dilate(img, k)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

膨脹效果如下,如圖所示,圖片眾多魚的亮度明顯變高了。

這種圖像效果,也被稱之為“近視眼”效果。

2. 開運算 & 閉運算

2.1 簡述

開運算就是將圖像先進(jìn)性腐蝕操作,再進(jìn)行膨脹操作。其可以用來抹除圖像外部的細(xì)節(jié)(噪聲)。

閉運算則與之相反

閉運算是先對圖像進(jìn)行膨脹操作,在進(jìn)行腐蝕操作。其可以用來抹除圖像的內(nèi)部細(xì)節(jié)(噪聲)。

腐蝕和膨脹雖然是逆操作,但是開運算和閉運算都不會使圖像恢復(fù)原狀。

2.2 開運算

以 3 為核

代碼示例如下

import cv2
import numpy as np
img = cv2.imread("test1.jpg")
k = np.ones((3, 3), np.uint8)
dst = cv2.erode(img, k)
dst = cv2.dilate(dst, k)
cv2.imshow("dst", dst)
cv2.waitKey()  
cv2.destroyAllWindows()  

2.3 閉運算

以 10 為核

代碼示例如下

import cv2
import numpy as np
img = cv2.imread("test1.jpg")
k = np.ones((10, 10), np.uint8)
dst = cv2.dilate(img, k)
dst = cv2.erode(dst, k)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

3. morphologyEx()方法

3.1 morphologyEx()方法 介紹

在python中OpenCV還提供了morphologyEx()方法(形態(tài)學(xué)方法),可以用來完成所有常用的形態(tài)學(xué)運算。

morphologyEx()語法如下:

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

其中

  • scr 表示圖像
  • op 表示操作類型
  • kernel 表示 核
  • anchor 表示錨點
  • iterations 為迭代次數(shù),默認(rèn)為1
  • borderType 是邊界樣式,默認(rèn)1
  • borderValue 是邊界值,默認(rèn)1

可以供op選擇的操作類型有:

參數(shù)值描述
cv2.MORPH_ERODE腐蝕
cv2.MORPH_DILATE膨脹
cv2.MORPH_ OPEN開運算,先腐蝕后膨脹
cv2.MORPH_CLOSE閉運算,先膨脹后腐蝕
cv2.MORPH_GRADIENT梯度運算,膨脹圖減腐蝕圖
cv2.MORPH_TOPHAT頂帽運算,原始圖減開運算圖
cv2.MORPH_BLACKHAT黑帽運算,閉運算圖,減開運算圖

接下來我們使用圖片"test2.jpg"(下圖)來繼續(xù)下邊的示例:

3.2 梯度運算

對“test2.jpg”以 4 為核做梯度運算:

import cv2
import numpy as np
img = cv2.imread("test2.jpg")  
k = np.ones((4, 4), np.uint8)  
dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k) 
cv2.imshow("dst", dst)  
cv2.waitKey()  
cv2.destroyAllWindows()  

梯度運算,即膨脹圖減去腐蝕圖,因為膨脹運算得到的圖像中我物體比原圖中的“大”,而腐蝕運算得到的圖像中的物體是收縮過的,比原圖中的“小”,所以膨脹的結(jié)果減去腐蝕的結(jié)果,會得到一個大概的、不精準(zhǔn)的輪廓。

test2.jpg梯度運算執(zhí)行效果如下:

3.3 頂帽運算

對“test2.jpg”以 4 為核做頂帽運算:

import cv2
import numpy as np
img = cv2.imread("test2.jpg")
k = np.ones((4, 4), np.uint8)
cv2.imshow("img", img)
dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

頂帽運算,即原圖減去開運算圖,因為開運算抹除了圖像的外部細(xì)節(jié),所以頂帽運算即“有外部細(xì)節(jié)的圖像 減去 無外部細(xì)節(jié)的圖像”,得到的結(jié)果也就只剩外部細(xì)節(jié)了。

頂帽運算處理效果如下:

3.4 黑帽運算

對“test2.jpg”以 4 為核做頂帽運算:

import cv2
import numpy as np
img = cv2.imread("test2.jpg")
k = np.ones((4, 4), np.uint8)
dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

黑帽運算,即原圖像的閉運算減去原圖像

因為閉運算可以抹除圖像的內(nèi)部細(xì)節(jié),所以黑帽運算即 “無內(nèi)部細(xì)節(jié)的圖像減去有內(nèi)部細(xì)節(jié)的圖像”,結(jié)果只剩下內(nèi)部細(xì)節(jié)。

黑帽運算處理效果如下:

以上就是Python OpenCV形態(tài)學(xué)運算示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV形態(tài)學(xué)運算的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • django框架使用views.py的函數(shù)對表進(jìn)行增刪改查內(nèi)容操作詳解【models.py中表的創(chuàng)建、views.py中函數(shù)的使用,基于對象的跨表查詢】

    django框架使用views.py的函數(shù)對表進(jìn)行增刪改查內(nèi)容操作詳解【models.py中表的創(chuàng)建、views.py中

    這篇文章主要介紹了django框架使用views.py的函數(shù)對表進(jìn)行增刪改查內(nèi)容操作,結(jié)合實例形式詳細(xì)分析了models.py中表的創(chuàng)建、views.py中函數(shù)的使用,基于對象的跨表查詢等相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2019-12-12
  • Python實現(xiàn)繪制水平線

    Python實現(xiàn)繪制水平線

    這篇文章主要為大家詳細(xì)介紹如何了在Python中創(chuàng)建一條水平線以及Python?中的?Matplotlib?庫的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2023-10-10
  • 如何使用Python最小二乘法擬合曲線代碼詳解

    如何使用Python最小二乘法擬合曲線代碼詳解

    最小二乘法Least Square Method做為分類回歸算法的基礎(chǔ),有著悠久的歷史,下面這篇文章主要給大家介紹了關(guān)于如何使用Python最小二乘法擬合曲線的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Python獲取文件夾下的所有文件路徑小結(jié)

    Python獲取文件夾下的所有文件路徑小結(jié)

    在Python編程過程中,需要獲取某一個文件目錄下的所有文件,或獲取文件目錄下的所有指定后綴名的文件等,本文主要介紹了Python獲取文件夾下的所有文件路徑,感興趣的可以了解一下
    2023-10-10
  • Ubuntu中配置TensorFlow使用環(huán)境的方法

    Ubuntu中配置TensorFlow使用環(huán)境的方法

    這篇文章主要介紹了Ubuntu中配置TensorFlow使用環(huán)境的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 深入理解Django-Signals信號量

    深入理解Django-Signals信號量

    這篇文章主要介紹了深入理解Django-Signals信號量,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 基于Python實現(xiàn)一個簡單的學(xué)生管理系統(tǒng)

    基于Python實現(xiàn)一個簡單的學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何利用python實現(xiàn)簡單的學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-12-12
  • pytorch 常用函數(shù) max ,eq說明

    pytorch 常用函數(shù) max ,eq說明

    這篇文章主要介紹了pytorch 常用函數(shù) max eq說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python函數(shù)進(jìn)階與文件操作詳情

    Python函數(shù)進(jìn)階與文件操作詳情

    這篇文章主要介紹了Python函數(shù)進(jìn)階與文件操作詳情,文章為榮啊主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • DataFrame:通過SparkSql將scala類轉(zhuǎn)為DataFrame的方法

    DataFrame:通過SparkSql將scala類轉(zhuǎn)為DataFrame的方法

    今天小編就為大家分享一篇DataFrame:通過SparkSql將scala類轉(zhuǎn)為DataFrame的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論