Question

I'm using OpenCV (Canny + findCountours) to find external contours of objects. The curve drawn is typically almost, but not entirely, closed. I'd like to close it - to find the region it bounds.

How do I do this?

Things considered:

  • Dilation - the examples I've seen show this after Canny, although it would seem to me it makes more sense to do this after findContours
  • Convex hull - might work, though I'm really trying to complete a curve
  • Shape simplification - related, but not exactly what I want
Was it helpful?

Solution

Using PolyLine method to draw contours

cv2.PolyLine(img, points, is_closed=True, 255, thickness=1, lineType=8, shift=0)

Read the docs for further details: http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html

Mark answered if it resolved your problem. If not then let me know.

OTHER TIPS

A little late, but I just had to deal with this myself. If you perform an opening operation (erosion followed by dilation) prior to the Canny edge detection, the edges you detect should be more continuous, resulting in better contours. This method appears to be fairly robust. I mentioned this in another post and posted a code sample as part of a recent question.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top