




下載本文檔
版權(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶莊店鋪轉(zhuǎn)讓合同協(xié)議
- 裝修合同保修補充協(xié)議
- 船舶碼頭租賃合同協(xié)議
- 裝修和家具購買合同協(xié)議
- 裝修電工清包工合同協(xié)議
- 蘋果手機租賃合同協(xié)議
- 虛構(gòu)房屋抵押合同協(xié)議
- 解除勞動合合同保密協(xié)議
- 藥店服務(wù)人員合同協(xié)議
- 西城區(qū)倉儲配送合同協(xié)議
- 鐵路機車車輛制動鉗工(高級)職業(yè)鑒定考試題庫(含答案)
- 河北省保定市重點中學(xué)2025屆高考英語一模試卷含解析
- 《便攜式揮發(fā)性有機物檢測儀 (PID)技術(shù)要求及監(jiān)測規(guī)范》
- 中建群塔作業(yè)防碰撞專項施工方案
- 2025屆江蘇省南京師范大學(xué)附屬中學(xué)高考仿真卷英語試題含解析
- 2024年10月廣東省高等教育自學(xué)考試08263工程經(jīng)濟學(xué)與項目資源試題及答案
- 【MOOC】數(shù)據(jù)結(jié)構(gòu)與算法-北京大學(xué) 中國大學(xué)慕課MOOC答案
- 農(nóng)村社區(qū)體育課件
- 員工培訓(xùn)流程圖
- 江蘇省南通市2024-2025學(xué)年高一上學(xué)期11月期中英語試題(無答案)
- 2024年“頭腦奧林匹克萬人大挑戰(zhàn)”題庫
評論
0/150
提交評論