Python通過OpenCV的findContours獲取輪廓并切割實例
1 獲取輪廓
OpenCV2獲取輪廓主要是用cv2.findContours
import numpy as np import cv2 im = cv2.imread('test.jpg') imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(imgray,127,255,0) image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
其中,findContours的第二個函數(shù)很重要,主要分為 cv2.RETR_LIST, cv2.RETR_TREE, cv2.RETR_CCOMP, cv2.RETR_EXTERNAL,具體含義可參考官方文檔
2 畫出輪廓
為了看到自己畫了哪些輪廓,可以使用 cv2.boundingRect()函數(shù)獲取輪廓的范圍,即左上角原點,以及他的高和寬。然后用cv2.rectangle()方法畫出矩形輪廓
for i in range(0,len(contours)): x, y, w, h = cv2.boundingRect(contours[i]) cv2.rectangle(image, (x,y), (x+w,y+h), (153,153,0), 5)
3切割輪廓
輪廓的切割主要是通過數(shù)組切片實現(xiàn)的,不過這里有一個小技巧:就是圖片切割的w,h是寬和高,而數(shù)組講的是行(row)和列(column)
所以,在切割圖片時,數(shù)組的高和寬是反過來寫的
newimage=image[y+2:y+h-2,x+2:x+w-2] # 先用y確定高,再用x確定寬 nrootdir=("E:/cut_image/") if not os.path.isdir(nrootdir): os.makedirs(nrootdir) cv2.imwrite( nrootdir+str(i)+".jpg",newimage) print (i)
這樣就可以把確定的輪廓都切割出來了。
總結
以上就是本文關于Python通過OpenCV的findContours獲取輪廓并切割實例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
python pands實現(xiàn)execl轉csv 并修改csv指定列的方法
今天小編就為大家分享一篇python pands實現(xiàn)execl轉csv 并修改csv指定列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12使用Python實現(xiàn)在Windows下安裝Django
今天小編就為大家分享一篇關于使用Python實現(xiàn)在Windows下安裝Django,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Python NumPy實現(xiàn)數(shù)組搜索示例詳解
NumPy是一個開源的Python科學計算庫,使用NumPy可以很自然地使用數(shù)組和矩陣,這篇文章主要介紹了使用NumPy實現(xiàn)數(shù)組搜索,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習吧2023-05-05python使用jenkins發(fā)送企業(yè)微信通知的實現(xiàn)
公司使用的是企業(yè)微信,因此考慮Jenkins通知企業(yè)微信機器人的實現(xiàn)方式,本文主要介紹了python使用jenkins發(fā)送企業(yè)微信通知的實現(xiàn),感興趣的可以了解一下2021-06-06PyQt5中多線程模塊QThread使用方法的實現(xiàn)
這篇文章主要介紹了PyQt5中多線程模塊QThread使用方法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01Python真題案例之小學算術?階乘精確值?孿生素數(shù)?6174問題詳解
這篇文章主要介紹了python實操案例練習,本文給大家分享的案例中主要任務有小學生算術、階乘的精確值、孿生素數(shù)、6174問題,需要的小伙伴可以參考一下2022-03-03