web-dev-qa-db-ja.com

OpenCVを使用してすべての境界ボックスを抽出Python

複数の境界ボックスを含む画像があります。
Books in Bounding Boxes

境界ボックスが含まれているものをすべて抽出する必要があります。これまでのところ、このサイトから私はこの答えを得ました:

y = img[by:by+bh, bx:bx+bw]
cv2.imwrite(string + '.png', y)

動作しますが、取得できるのは1つだけです。コードを変更するにはどうすればよいですか?輪郭のループに入れてみましたが、複数の画像ではなく1つの画像が出力されます。

よろしくお願いします。

12
xandra12791

そこに行きます:

import cv2

im = cv2.imread('c:/data/ph.jpg')
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
contours, hierarchy = cv2.findContours(gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[-2:]
idx =0 
for cnt in contours:
    idx += 1
    x,y,w,h = cv2.boundingRect(cnt)
    roi=im[y:y+h,x:x+w]
    cv2.imwrite(str(idx) + '.jpg', roi)
    #cv2.rectangle(im,(x,y),(x+w,y+h),(200,0,0),2)
cv2.imshow('img',im)
cv2.waitKey(0)    
22
Zaw Lin