Python影像處理(7):利用輪廓分塊處理

來源:互聯網
上載者:User

標籤:vs2013   opencv   python   影像處理   

快樂蝦

http://blog.csdn.net/lights_joy/

歡迎轉載,但請保留作者資訊


在得到綠色植物的前景映像後,我們希望能夠進一步標識出其中的棉花植株和雜草。測試映像仍然是它:


首先要做的當然是對映像進行分地區處理。在上一步中我們得到了標識綠色植物的二值映像,一個很自然的想法是利用此二值映像的輪廓進行分塊。


# 擷取輪廓,我們的目的是分塊,因此只使用外層輪廓,使用點序列的形式bin_img_save = np.copy(bin_img)(contoures, hierarchy) = cv2.findContours(bin_img_save, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

這裡需要注意的是,在使用findContours函數前必須將映像複製一份,否則此函數將改變傳入的映像資料。


計算的結果居然有49個地區,對於太小的地區其實我們並不關心,我們計算地區面積並從大到小進行排序。OpenCV提供了兩個排序函數,sort和sortIdx,其中sort可以得到排序後的值數組,而sortIdx能夠得到這些值在原數組中的序號,因而這裡使用sortIdx。

# 按面積排序areas = np.zeros( len(contoures) )idx = 0for cont in contoures :     areas[idx] = cv2.contourArea(cont)    idx = idx + 1areas_s = cv2.sortIdx(areas, cv2.SORT_DESCENDING | cv2.SORT_EVERY_COLUMN)

然後處理面積大於100的地區:

(b8, g8, r8) = cv2.split(src)# 對每個地區進行處理for idx in areas_s :    if areas[idx] < 100 :        break    # 繪製地區映像,通過將thickness設定為-1可以填充整個地區,否則只繪製邊緣    poly_img = np.zeros( bin_img.shape, dtype = np.uint8 )    cv2.drawContours(poly_img, contoures, idx, [255,255,255], -1)    poly_img = poly_img & bin_img    # 得到彩色的映像    color_img = cv2.merge([b8 & poly_img, g8 & poly_img, r8 & poly_img])    cv2.imshow(‘poly_img‘, color_img)    cv2.waitKey()

目前我們僅僅是顯示這塊地區的彩色映像。最後得到這樣的結果:





我們需要正確標識這兩塊地區是棉花還是雜草。











??

Python影像處理(7):利用輪廓分塊處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.