Вы используете cv2.drawContours
неправильно.Передача -1
в качестве индекса контура будет рисовать все контуры, а не отдельные.Чтобы нарисовать отдельные контуры, необходимо передать соответствующий индекс как:
_, cnt, hierarchy = cv2.findContours(canvas.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for i in xrange(len(cnt)):
output_canvas = np.zeros(canvas.shape, dtype=np.uint8)
cv2.drawContours(output_canvas, cnt, i, np.array([255, 255, 255, 255]), -1)
cv2.imwrite("./contour{}.png".format(i), output_canvas)