问题
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?
回答1:
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.
回答2:
img_output, contours, hierarchy = cv2.findContours(blank_image_firstImage, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
This removes the child contour
来源:https://stackoverflow.com/questions/37479338/how-to-remove-a-contour-inside-contour-in-python-opencv