Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove a contour inside contour in Python OpenCV?

OpenCV in Python provides the following code:

regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)


for region in regions:
    x, y, w, h = cv2.boundingRect(region)

    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)

This gives some contours within contour. How to remove them in Python?

like image 483
Python1c Avatar asked May 27 '16 09:05

Python1c


1 Answers

For that, you should take a look at this tutorial on how to use the hierarchy object returned by the method findContours .

The main point is that you should use cv2.RETR_TREE instead of cv2.RETR_LIST to get parent/child relationships between your clusters:

regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Then you can check whether a contour with index i is inside another by checking if hierarchy[0,i,3] equals -1 or not. If it is different from -1, then your contour is inside another.

like image 172
Sunreef Avatar answered Oct 05 '22 03:10

Sunreef