Extract all bounding boxes using OpenCV Python

xandra12791 picture xandra12791 · Jan 14, 2014 · Viewed 39.3k times · Source

I have an image that contains more than one bounding box.
Books in Bounding Boxes

I need to extract everything that has bounding boxes in them. So far, from this site I've gotten this answer:

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

It works, however, it only gets one. How should I modify the code? I tried putting it in the loop for contours but it still spews out one image instead of multiple ones.

Thank you so much in advance.

Answer

Zaw Lin picture Zaw Lin · Jan 14, 2014

there you go:

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)