




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第基于python使用OpenCV進(jìn)行物體輪廓排序在進(jìn)行圖像處理過程中,我們經(jīng)常會遇到一些和物體輪廓相關(guān)的操作,比如求目標(biāo)輪廓的周長面積等,我們直接使用Opencv的findContours函數(shù)可以很容易的得到每個目標(biāo)的輪廓,但是可視化后,這個次序是無序的,如下圖左側(cè)所示:
本節(jié)打算實現(xiàn)對物體輪廓進(jìn)行排序,可以實現(xiàn)從上到下排序或者從左倒右排序,達(dá)到上圖右側(cè)的可視化結(jié)果.
2.1讀取圖像
首先,我們來讀取圖像,并得到其邊緣檢測圖,代碼如下:
image=cv2.imread(args[image])
accumEdged=np.zeros(image.shape[:2],dtype=uint8)
forchanincv2.split(image):
chan=cv2.medianBlur(chan,11)
edged=cv2.Canny(chan,50,200)
accumEdged=cv2.bitwise_or(accumEdged,edged)
cv2.imshow(edgemap,accumEdged)
運行結(jié)果如下:
左側(cè)為原圖,右側(cè)為邊緣檢測圖.
2.2獲取輪廓
opencv-python中查找圖像輪廓的API為:findContours函數(shù),該函數(shù)接收二值圖像作為輸入,可輸出物體外輪廓、內(nèi)外輪廓等等.
代碼如下:
cnts=cv2.findContours(accumEdged.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts=grab_contours(cnts)
cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[:5]
orig=image.copy()
#unsorted
for(i,c)inenumerate(cnts):
orig=draw_contour(orig,c,i)
cv2.imshow(Unsorted,orig)
cv2.imwrite(./Unsorted.jpg,orig)
運行結(jié)果如下:
需要注意的是,在OpenCV2.X版本,函數(shù)findContours返回兩個值,
函數(shù)聲明如下:
contours,hierarchy=cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
但是在OpenCV3以上版本,該函數(shù)的聲明形式如下:
image,contours,hierarchy=cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
所以為了適配兩種模式,我們實現(xiàn)函數(shù)grab_contours來根據(jù)不同的版本,選擇對應(yīng)的返回輪廓的下標(biāo)位置,
代碼如下:
defgrab_contours(cnts):
iflen(cnts)==2:
cnts=cnts[0]
eliflen(cnts)==3:
cnts=cnts[1]
returncnts
2.3輪廓排序
通過上述步驟,我們得到了圖像中的所有物體的輪廓,接下來我們定義函數(shù)sort_contours函數(shù)來實現(xiàn)對輪廓進(jìn)行排序操作,該函數(shù)接受method參數(shù)來實現(xiàn)按照不同的次序?qū)喞M(jìn)行排序,比如從左往右,或者從右往左.
代碼如下:
defsort_contours(cnts,method=left-to-right):
reverse=False
i=0
ifmethod==right-to-leftormethod==bottom-to-top:
reverse=True
ifmethod==bottom-to-topormethod==top-to-bottom:
i=1
boundingBoxes=[cv2.boundingRect(c)forcincnts]
(cnts,boundingBoxes)=zip(*sorted(zip(cnts,boundingBoxes),key=lambdab:b[1][i],reverse=reverse))
return(cnts,boundingBoxes)
上述代碼的核心思想為先求出每個輪廓的外接矩形框,然后通過對外接框按照x或y坐標(biāo)排序進(jìn)而來實現(xiàn)對輪廓的排序.
調(diào)用代碼如下:
#sorted
(cnts,boundingboxes)=sort_contours(cnts,method=args[method])
for(i,c)inenumerate(cnts):
image=draw_contour(image,c,i)
cv2.imshow(Sorted,image)
cv2.wai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2026學(xué)年江蘇省東??h晶都雙語學(xué)校數(shù)學(xué)三上期末考試模擬試題含解析
- 2025-2026學(xué)年甘肅省慶陽市慶陽縣數(shù)學(xué)三上期末模擬試題含解析
- 2025-2026學(xué)年德宏傣族景頗族自治州數(shù)學(xué)三上期末達(dá)標(biāo)檢測試題含解析
- 2024年隴南地區(qū)徽縣三上數(shù)學(xué)期末考試模擬試題含解析
- 公共衛(wèi)生管理 (2)課件
- 自考2025年行政管理商業(yè)模式試題及答案
- 精細(xì)管理下的執(zhí)業(yè)藥師試題及答案
- 自考行政管理2025年求知若渴試題及答案分享
- 護理理論2025年考試試題及答案
- 2025年執(zhí)業(yè)醫(yī)師考試住院醫(yī)師規(guī)范化培訓(xùn)試題及答案
- GB 20943-2025交流-直流和交流-交流電源能效限定值及能效等級
- 2025年甘肅省公路發(fā)展集團限公司招聘70人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 一??偨Y(jié)沖刺中考主題班會
- GB/T 45227-2025化工園區(qū)封閉管理系統(tǒng)技術(shù)要求
- 《田徑理論知識》課件
- 《俄羅斯債務(wù)危機》課件
- 專題05-必修三-必過知識點清單(解析版)(新教材北師大版)
- 2025年廣東工業(yè)大學(xué)招聘行政助理1名歷年高頻重點提升(共500題)附帶答案詳解
- 鐵路機車車輛制動鉗工(高級)職業(yè)鑒定考試題庫(含答案)
- 《便攜式揮發(fā)性有機物檢測儀 (PID)技術(shù)要求及監(jiān)測規(guī)范》
- 甲亢碘131治療的護理
評論
0/150
提交評論