OpenCV學習記錄python實現(xiàn)連通域處理函數(shù)_第1頁
OpenCV學習記錄python實現(xiàn)連通域處理函數(shù)_第2頁
OpenCV學習記錄python實現(xiàn)連通域處理函數(shù)_第3頁
OpenCV學習記錄python實現(xiàn)連通域處理函數(shù)_第4頁
OpenCV學習記錄python實現(xiàn)連通域處理函數(shù)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第OpenCV學習記錄python實現(xiàn)連通域處理函數(shù)目錄1、兩個函數(shù)介紹1.1什么是連通域1.2cv2.connectedComponents()1.3cv2.connectedComponentsWithStats()2、代碼實踐3、總結

1、兩個函數(shù)介紹

總得來說,connectedComponents()僅僅創(chuàng)建了一個標記圖(圖中不同連通域使用不同的標記,和原圖寬高一致),connectedComponentsWithStats()可以完成上面任務,除此之外,還可以返回每個連通區(qū)域的重要信息boundingbox,area,andcentroid。

1.1什么是連通域

連通區(qū)域一般是指圖像中具有相同像素值且位置相鄰的前景像素點組成的圖像區(qū)域。連通區(qū)域分析是指將圖像中的各個連通區(qū)域找出并標記。

連通區(qū)域分析是一種在CVPR和圖像分析處理的眾多應用領域中較為常用和基本的方法。

例如:OCR識別中字符分割提?。ㄜ嚺谱R別、文本識別、字幕識別等)、視覺跟蹤中的運動前景目標分割與提?。ㄐ腥巳肭謾z測、遺留物體檢測、基于視覺的車輛檢測與跟蹤等)、醫(yī)學圖像處理(感興趣目標區(qū)域提?。⒌鹊?。也就是說,在需要將前景目標提取出來以便后續(xù)進行處理的應用場景中都能夠用到連通區(qū)域分析方法,通常連通區(qū)域分析處理的對象是一張二值化后的圖像。

1.2cv2.connectedComponents()

函數(shù)各參數(shù)意義:

num_objects,labels=cv2.connectedComponents(image)

參數(shù)介紹如下:

image:也就是輸入圖像,必須是二值圖,即8位單通道圖像。(因此輸入圖像必須先進行二值化處理才能被這個函數(shù)接受)

返回值:

num_labels:所有連通域的數(shù)目

labels:圖像上每一像素的標記,用數(shù)字1、2、3表示(不同的數(shù)字表示不同的連通域)

1.3cv2.connectedComponentsWithStats()

這個函數(shù)的作用是對一幅圖像進行連通域提取,并返回找到的連通域的信息:retval、labels、stats、centroids

num_labels,labels,stats,centroids=cv2.connectedComponentsWithStats(image,connectivity=8,ltype=None)

參數(shù)介紹如下:

image:也就是輸入圖像,必須是二值圖,即8位單通道圖像。(因此輸入圖像必須先進行二值化處理才能被這個函數(shù)接受)connectivity:可選值為4或8,也就是使用4連通還是8連通。ltype:輸出圖像標記的類型,目前支持CV_32S和CV_16U。

返回值:

num_labels:所有連通域的數(shù)目labels:圖像上每一像素的標記,用數(shù)字1、2、3表示(不同的數(shù)字表示不同的連通域)stats:每一個標記的統(tǒng)計信息,是一個5列的矩陣,每一行對應每個連通區(qū)域的外接矩形的x、y、width、height和面積,示例如下:00720720291805centroids:連通域的中心點

2、代碼實踐

兩個代碼的用處是共通的,cv2.connectedComponentsWithStats函數(shù)返回的信息量更大,所以這里展示它的應用。

importcv2

importnumpyasnp

#讀入圖片

img=cv2.imread("001.jpg")

#中值濾波,去噪

img=cv2.medianBlur(img,3)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

dWindow('original',cv2.WINDOW_AUTOSIZE)

cv2.imshow('original',gray)

#閾值分割得到二值化圖片

ret,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)

#膨脹操作

kernel2=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))

bin_clo=cv2.dilate(binary,kernel2,iterations=2)

#連通域分析

num_labels,labels,stats,centroids=cv2.connectedComponentsWithStats(bin_clo,connectivity=8)

#查看各個返回值

#連通域數(shù)量

print('num_labels=',num_labels)

#連通域的信息:對應各個輪廓的x、y、width、height和面積

print('stats=',stats)

#連通域的中心點

print('centroids=',centroids)

#每一個像素的標簽1、2、3.。。,同一個連通域的標簽是一致的

print('labels=',labels)

#不同的連通域賦予不同的顏色

output=np.zeros((img.shape[0],img.shape[1],3),np.uint8)

foriinrange(1,num_labels):

mask=labels==i

output[:,:,0][mask]=np.random.randint(0,255)

output[:,:,1][mask]=np.random.randint(0,255)

output[:,:,2][mask]=np.random.randint(0,255)

cv2.imshow('oginal',output)

cv2.waitKey()

cv2.destroyAllWindows()

打印出的連通域的信息如下:

重點是理解stats和labels參數(shù)的意義,其他的參數(shù)都容易理解:

labels:對原始圖中的每一個像素都打上標簽,背景為0,連通域打上1,2,3。。。的標簽,同一個連通域的像素打上同樣的標簽。相當與對每一個像素進行了分類(分割)

stats:每一連通域的信息,表示每個連通區(qū)域的外接矩形(起始點的x、y、寬和高)和面積

連通域檢測的效果圖:

3、總結

(1)連通域分析可以實現(xiàn)將前景目標提取出來以便后續(xù)進行處理(類似于輪廓處理)

(2)重點是cv2.connectedComponentsWithStats函數(shù)中stats和labels參數(shù)的意義

labels:對原始圖中的每一個像素都打上標簽,背景為0,連通域打上1,2,3。。。的標簽,同一個連通域的像素打上同樣的標簽。相當與對每一個像素進行了分類(分割)

stats:每一連通域的信息,表示每個連通區(qū)域的外接矩形(起始點的x、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論