欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取

OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取

熱門標(biāo)簽:南陽打電話機(jī)器人 騰訊地圖標(biāo)注沒法顯示 海外網(wǎng)吧地圖標(biāo)注注冊 孝感營銷電話機(jī)器人效果怎么樣 打電話機(jī)器人營銷 ai電銷機(jī)器人的優(yōu)勢 聊城語音外呼系統(tǒng) 地圖標(biāo)注自己和別人標(biāo)注區(qū)別 商家地圖標(biāo)注海報

隨著當(dāng)今世界的發(fā)展,計算機(jī)視覺技術(shù)的應(yīng)用越來越廣泛。伴隨著硬件設(shè)備的不斷升級,構(gòu)造復(fù)雜的計算機(jī)視覺應(yīng)用變得越來越容易了。OpenCV像是一個黑盒,讓我們專注于視覺應(yīng)用的開發(fā),而不必過多的關(guān)注基礎(chǔ)圖象處理的具體細(xì)節(jié)。

圖像分割

了解分水嶺算法之前,我們需要了解什么是圖像的分割。

在圖像的處理過程中,經(jīng)常需要從圖像中將前景對象作為目標(biāo)圖像分割或者提取出來。例如,在視頻監(jiān)控中,觀測到的是固定背景下的視頻內(nèi)容,而我們對背景本身并無興趣,感興趣的是背景中出現(xiàn)的車輛,行人或者其他對象。我們希望將這些對象從視頻中提取出來,而忽略那些沒有對象進(jìn)入背景的視頻內(nèi)容。

分水嶺算法

圖像分割是圖像處理過程中一種非常重要的操作。分水嶺算法將圖像形象地比喻為地理學(xué)上的地形表面,實現(xiàn)圖像分割,該算法非常有用。

下面,博主對分水嶺算法的相關(guān)內(nèi)容做簡單的介紹。(詳細(xì)可以參考岡薩雷斯的《數(shù)字圖像處理》一書)

任何一副灰度圖像,都可以被看作是地理學(xué)上的地形表面,灰度值越高的區(qū)域可以被看成是山峰,灰度值越低的區(qū)域可以被看成是山谷。

如果我們向每個山谷中灌注不同顏色的水。那么隨著水位的不斷升高,不同山谷的水就匯聚到一起。在這個過程中,為了防止不同山谷的水交匯,我們需要在水流可能匯合的地方構(gòu)建堤壩。該過程將圖像分為兩個不同的集合:集水盆地和分水嶺線。我們構(gòu)建的堤壩就是分水嶺線,也即對原始圖像的分割。這就是分水嶺算法的原理。

不過,一般的圖像都存在著噪聲,采用分水嶺算法時,會經(jīng)常得到過度分割的結(jié)果。為了改善圖像分割的效果,人們提出了基于掩摸的改進(jìn)的分水嶺算法。改進(jìn)的分水嶺算法允許用戶將它認(rèn)為是同一個分割區(qū)域的部分標(biāo)注出來。這樣,分水嶺算法在處理時,就會將標(biāo)注的部分處理為同一個分割區(qū)域。

如果對于該理論不怎么了解,可以使用軟件PowerPoint中的“刪除背景”功能進(jìn)行觀察配合理解。

waterShed函數(shù)

在OpenCV中,可以使用函數(shù)cv2.watershed()函數(shù)實現(xiàn)分水嶺算法。不過,具體實現(xiàn)的過程,還需要借助形態(tài)學(xué)函數(shù),距離變換函數(shù)cv2.distanceTransform(),cv2.connectedComponents()來完成圖像分割。

形態(tài)學(xué)分割

在使用分水嶺算法之前,我們需要對圖像進(jìn)行簡單的形態(tài)學(xué)處理。一般情況下,我們都是使用形態(tài)學(xué)中的開運算,因為開運算是先腐蝕后膨脹的操作,能夠去除圖像內(nèi)的噪聲。

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread("36.jpg")
k=np.ones((5,5),dtype=np.uint8)
e=cv2.erode(img,k)
result=cv2.subtract(img,e)

plt.subplot(131)
plt.imshow(img, cmap="gray")
plt.axis('off')

plt.subplot(132)
plt.imshow(e, cmap="gray")
plt.axis('off')

plt.subplot(133)
plt.imshow(result, cmap="gray")
plt.axis('off')
plt.show()

回顧一下,我們前面的開運算函數(shù)為cv2.erode(),這里我們首先經(jīng)過開運算去除噪聲。然后減法運算cv2.subtract()獲取圖像邊界。運行之后,效果如下:

distanceTransform函數(shù)

當(dāng)圖像內(nèi)的各個子圖沒有連接時,可以直接使用形態(tài)學(xué)的腐蝕操作確定前景對象,但是如果圖像內(nèi)的子圖連接在一起時,就很難確定前景對象了。這個時候,就需要借助變換函數(shù)cv2.distanceTransform()方便地將前景對象提取出來。

cv2.distanceTransform()反應(yīng)了各個像素點與背景(值為0的像素點)的距離關(guān)系。通常情況下:

  • 如果前景對象的中心距離值為0的像素點距離較遠(yuǎn),會得到一個較大的值。
  • 如果前景對象的邊緣距離值為0的像素點較近,會得到一個較小的值。

下面,我們來使用該函數(shù)確定一副圖像的前景,并觀察效果。

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread("36.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
k = np.ones((5, 5), dtype=np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, k, iterations=2)
distTransform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)
ret, fore = cv2.threshold(distTransform, 0.7 * distTransform.max(), 255, 0)

plt.subplot(131)
plt.imshow(img, cmap="gray")
plt.axis('off')

plt.subplot(132)
plt.imshow(distTransform, cmap="gray")
plt.axis('off')

plt.subplot(133)
plt.imshow(fore, cmap="gray")
plt.axis('off')
plt.show()

這里,我們使用cv2.morphologyEx函數(shù)進(jìn)行開運算,同時使用cv2.distanceTransform得到距離圖像,最后在通過cv2.threshold對距離圖像進(jìn)行閾值處理,確定前景。運行之后,效果如下:

確定未知區(qū)域

通過距離函數(shù),我們獲取到了圖像的“中心”,也就是“確定前景”。為了方便后續(xù)的講解,我們將確定前景稱為F。

圖像中有了確定前景F和確定背景B,剩下的區(qū)域就是未知區(qū)域UN了。這部分區(qū)域正是分水嶺算法要進(jìn)一步明確的區(qū)域。

針對一副圖像0,通過以下關(guān)系能夠得到未知區(qū)域UN:

未知區(qū)域UN=圖像0-確定背景B-確定前景F

由上述公式變換得到:

未知區(qū)域UN=(圖像0-確定背景B)-確定前景F

其中(圖像0-確定背景B)就是我們開始的減法操作,通過形態(tài)學(xué)膨脹得到。也只需要將上面的代碼添加4行并更改顯示的代碼內(nèi)容:

bg=cv2.dilate(opening,k,iterations=3)
fore=np.uint8(fore)
un=cv2.subtract(bg,fore)

plt.subplot(221)
plt.imshow(img, cmap="gray")
plt.axis('off')

plt.subplot(222)
plt.imshow(bg, cmap="gray")
plt.axis('off')

plt.subplot(223)
plt.imshow(fore, cmap="gray")
plt.axis('off')

plt.subplot(224)
plt.imshow(un, cmap="gray")
plt.axis('off')
plt.show()

運行之后,效果如下:

左上為原圖

右上為原圖膨脹后得到的圖像bg,其背景圖像是確定背景B。前景圖像是“原始圖像0-確定背景B”

左下為確定前景圖像fore

右下為未知區(qū)域圖像UN

ConnectedComponents函數(shù)

明確了確定前景后,就可以對確定前景進(jìn)行標(biāo)注了。在OpenCV中,它提供了cv2.ConnectedComponents()函數(shù)進(jìn)行標(biāo)注。

該函數(shù)會將背景標(biāo)注為0,將其他的對象使用從1開始的正整數(shù)標(biāo)注。它只有一個參數(shù)8位單通道的待標(biāo)注圖像。

返回值有兩個:retval為返回的標(biāo)注數(shù)量,labels為標(biāo)注的結(jié)果圖像。

下面,我們來使用該函數(shù)進(jìn)行標(biāo)注。代碼如下(同樣更改上面bg下面代碼就行):

bg = cv2.dilate(opening, k, iterations=3)
fore = np.uint8(fore)
ret, markets = cv2.connectedComponents(fore)
unknown=cv2.subtract(bg,fore)
markets=markets+1
markets[unknown==255]=0

plt.subplot(131)
plt.imshow(img, cmap="gray")
plt.axis('off')

plt.subplot(132)
plt.imshow(fore, cmap="gray")
plt.axis('off')

plt.subplot(133)
plt.imshow(markets, cmap="gray")
plt.axis('off')
plt.show()

修改上面fore = np.uint8(fore)的代碼,并修改輸出內(nèi)容。運行之后,我們會得到原圖,前景圖像的中心點圖像fore以及標(biāo)注后的結(jié)果圖像markets。效果如下:

實戰(zhàn)分水嶺算法

經(jīng)過前文的介紹,我們了解了使用分水嶺算法進(jìn)行圖像分割的基本步驟:

  • 通過形態(tài)學(xué)開運算對原始圖像0進(jìn)行去噪
  • 通過腐蝕操作獲取“確定背景B”。需要注意,這里得到“原始圖像-確定背景”即可
  • 利用距離變換函數(shù)對原始圖像進(jìn)行運算,并對其進(jìn)行閾值處理,得到“確定前景F”
  • 計算未知區(qū)域UN(UN=0-B-F)
  • 利用函數(shù)cv2.connectedComponents()對原始圖像0進(jìn)行標(biāo)注
  • 對函數(shù)cv2.connectedComponents()的標(biāo)注結(jié)果進(jìn)行修正
  • 使用分水嶺函數(shù)完成圖像分割

完整代碼如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread("36.jpg")
plt.subplot(121)
plt.imshow(img, cmap="gray")
plt.axis('off')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
k = np.ones((5, 5), dtype=np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, k, iterations=2)
distTransform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)
ret, fore = cv2.threshold(distTransform, 0.2 * distTransform.max(), 255, 0)
bg = cv2.dilate(opening, k, iterations=3)
fore = np.uint8(fore)
ret, markets = cv2.connectedComponents(fore)
unknown = cv2.subtract(bg, fore)
markets = markets + 1
markets[unknown == 255] = 0
markets = cv2.watershed(img, markets)
img[markets == -1] = [255, 0, 0]

plt.subplot(122)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.show()

運行之后,我們就可以得到分割的圖像:

當(dāng)然,參數(shù)可以調(diào)整,可以看到大致的硬幣被完整的分割出來了。

到此這篇關(guān)于OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取的文章就介紹到這了,更多相關(guān)OpenCV圖像分割與提取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python數(shù)字圖像處理之骨架提取與分水嶺算法
  • python opencv之分水嶺算法示例
  • Python基于分水嶺算法解決走迷宮游戲示例
  • OpenCV半小時掌握基本操作之分水嶺算法

標(biāo)簽:撫州 迪慶 六盤水 南寧 聊城 揚州 楊凌 牡丹江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取》,本文關(guān)鍵詞  OpenCV-Python,使用,分水嶺,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取》相關(guān)的同類信息!
  • 本頁收集關(guān)于OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日韩视频国产视频| 黄网站免费久久| 99视频精品在线| 五月天av网站| 国产精品久久免费看| 国产一区 二区| 日韩一级片在线免费观看| 欧美mv日韩mv国产网站app| 日韩国产欧美三级| 中文乱码人妻一区二区三区视频| 欧美日韩精品一区二区天天拍小说 | 日韩av一级片| 免费观看一级一片| 日韩一区二区在线看| 天天av天天翘天天综合网| 日本精品一二三区| 69久久99精品久久久久婷婷| 首页国产欧美久久| 国产男女猛烈无遮挡a片漫画| 欧美刺激脚交jootjob| 久久99精品国产.久久久久| 亚洲精品国产精品国自产网站| 久久综合中文字幕| 国产成人精品免费一区二区| 国产乱国产乱老熟300| 亚洲人妖av一区二区| 91老师片黄在线观看| 欧美日韩国产中文| 日韩激情视频网站| 精品无人区无码乱码毛片国产| 久久久精品综合| 成人午夜av在线| 色成年激情久久综合| 亚洲一区二区三区在线| 懂色av粉嫩av蜜乳av| 欧美精品一区二区在线观看| 国产精品亚洲视频| 色综合久久久久综合体| 亚洲福利视频导航| 泷泽萝拉在线播放| 国产精品欧美一级免费| 无码人妻少妇色欲av一区二区| 在线不卡一区二区| 激情五月婷婷综合网| 天天做夜夜爱爱爱| 亚洲资源在线观看| 波多野结衣办公室33分钟| 日本一区二区三区视频视频| 91在线丨porny丨国产| 这里是久久伊人| 国产在线观看免费一区| 欧美在线视频第一页| 午夜视频在线观看一区| 黄色国产在线播放| 一区二区三区四区高清精品免费观看| 少妇精品一区二区| 欧美激情在线观看视频免费| 国产视频一区二区在线观看| 91在线一区二区三区| 日韩美女视频一区二区在线观看| 国产91在线看| 制服丝袜亚洲色图| 国产精品一级片| 欧美日韩成人综合| 国产精品影音先锋| 在线电影院国产精品| 国产福利一区在线观看| 制服丝袜国产精品| 成人性生交大片免费看中文 | 亚洲6080在线| 亚洲女人毛茸茸高潮| 亚洲成在线观看| 少妇高潮在线观看| 日韩高清在线观看| 校园春色 亚洲| 麻豆传媒一区二区三区| 色老汉av一区二区三区| 久久成人av少妇免费| 欧美三级欧美一级| 国产乱一区二区| 91精品国产综合久久久蜜臀图片| 丁香网亚洲国际| 日韩欧美二区三区| 妖精视频在线观看| 国产精品女同一区二区三区| 欧美成人三级伦在线观看| 亚洲免费伊人电影| 战狼4完整免费观看在线播放版| 亚洲成人第一页| 色屁屁一区二区| 国产一区二区三区日韩| 91精品欧美久久久久久动漫| 不卡区在线中文字幕| 久久久久久综合| 特级西西人体wwwww| 亚洲乱码国产乱码精品精可以看| 国产毛片欧美毛片久久久| 亚洲成人在线免费| 色94色欧美sute亚洲线路一久| 国产精品资源在线| 精品国产a毛片| 四虎成人免费视频| 亚洲激情第一区| 疯狂试爱三2浴室激情视频| 激情文学综合网| 欧美一二区视频| 制服丝袜在线第一页| 亚洲精品成人在线| 91久久精品一区二区三| 国产高清精品网站| 久久久久久久久久久久久女国产乱| a天堂视频在线观看| 亚洲电影在线免费观看| 一本在线高清不卡dvd| 国产不卡一区视频| 国产日产欧美精品一区二区三区| www.超碰97| 日韩成人精品在线观看| 欧美久久久久中文字幕| 免费啪视频在线观看| 亚洲精品一区二区三区在线播放| 久久精品国产成人一区二区三区| 欧美一区二区三区在线电影| 国产性生活毛片| 天堂va蜜桃一区二区三区| 欧美三级在线视频| 亚洲美女精品视频| 亚洲一区日韩精品中文字幕| 欧美在线三级电影| 国产老头和老头xxxx×| 亚洲激情五月婷婷| 欧美三级韩国三级日本一级| 精品人妻无码中文字幕18禁| 亚洲制服丝袜av| 欧美巨大另类极品videosbest | 免费精品视频最新在线| 日韩欧美中文字幕公布| a级在线观看视频| 日本大胆欧美人术艺术动态| 日韩精品一区二区三区四区| av男人的天堂av| 狠狠色狠狠色综合系列| 国产亚洲一本大道中文在线| 国产wwwwxxxx| 99在线热播精品免费| 亚洲一区二区三区中文字幕在线 | 欧美在线你懂得| 久久久久国产免费| 日韩精彩视频在线观看| 久久先锋影音av鲁色资源网| 日韩免费av一区| caoporn国产一区二区| 一区av在线播放| 91精品国产免费| 亚洲第一视频区| 成人午夜在线播放| 亚洲综合成人在线视频| 欧美一级黄色录像| 人人爽人人爽人人片| 成熟亚洲日本毛茸茸凸凹| 亚洲激情图片一区| 欧美一级午夜免费电影| 性猛交娇小69hd| 本田岬高潮一区二区三区| 亚洲国产一区视频| 精品美女在线观看| 国产激情无码一区二区三区| 91社区在线播放| 麻豆一区二区在线| 日本一区二区动态图| 欧美在线视频不卡| 9.1成人看片免费版| 国产99一区视频免费 | 亚洲精品一二三| 欧美一区二区三区人| 在线视频这里只有精品| 久久国产免费视频| 激情综合色综合久久综合| 亚洲欧洲精品成人久久奇米网| 91精品国产综合久久久久久漫画| 精品成人无码一区二区三区| 91在线porny国产在线看| 免费视频一区二区| 综合久久久久久久| 日韩小视频在线观看专区| 波多野结衣在线网址| 黄色av电影网站| 国产伦精品一区二区三区在线观看| 亚洲美女视频在线观看| 精品国产免费一区二区三区四区| 成人免费毛片东京热| 变态另类丨国产精品| 成人一二三区视频| 日韩电影在线看| 亚洲人吸女人奶水| 久久一夜天堂av一区二区三区| 高清国产一区二区| 日本成人在线不卡视频| 亚洲精品视频在线观看免费| 精品国产91久久久久久久妲己|