簡體   English   中英

在找到的邊界python opencv中提取內容?

[英]Extracting contents inside of found boundary python opencv?

我想提取圖像的一部分並將其另存為邊界內的單獨圖像。 我已經提取並繪制了邊界,如下所示:

cnts, hierarchy= cv2.findContours(gray.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for contour in cnts:
    print(cv2.boundingRect(contour))
cv2.drawContours(img,cnts,-1,(125,125,0),3 )
cv2.imshow('contours',img)
cv2.waitKey(0)  
cv2.destroyAllWindows()

如何獲得邊界內的圖像作為單獨的圖像? 這是我的圖像:

在此處輸入圖片說明

您應該找到邊界矩形,然后將其保存到新圖像

像這樣:

r = cv2.boundingRect(contour)
crop_img = im[r[1]:r[1]+r[3], r[0]:r[0]+r[2]]
cv2.imwrite('roi.png', crop_img)

因為numpy切片期望y:y + h,所以x:x + h

如果需要定向的邊界框,請使用minAreaRect

編輯:

您說只想要米粒。 由於任何圖像都是矩形的,因此您始終會有一些背景。 您可以做的是將背景塗成黑色:

  • 創建一個具有原始圖像大小的黑色圖像(一個帶有許多米粒的圖像)
  • 厚度= CV_FILLED(或任何負數)且顏色為白色的drawContours()。 它應該是黑色的圖像,白色只有一個米粒。 我們稱其為“面具”
  • 然后對原始圖片和“蒙版”進行按位排列
  • 然后做上面解釋的裁剪(boundingRect)

如果您想吃所有的米飯,就應該在里面做所有的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM