Вы должны использовать функцию << <a href="https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_table_of_contents_contours/py_table_of_contents_contours.html" rel="nofollow noreferrer"> cv2.findContours >>
Используется так:
contours = cv2.findContours(image, cv2.RETR_LIST, cv2.RETR_EXTERNAL)
// contours : Numpy array with shape [number_contours, number_points,1,2]
// image: Your binary image as input
// cv2.RETR_EXTERNAL: Way to get your contours hierarchie
// cv2.CHAIN_APPROX_NONE: Approximation for optimisation
Иерархия контуров ie документация
Приближенная документация
Я рекомендую вам не использовать хитрость для решения вашей проблемы, но пороговый метод застрахован.
Для обнаружения писем вы можете использовать алгоритм ICP , чтобы иметь возможность автоматически читать текст.
Для отслеживания ваших контуров используйте этот код:
import random
contours = sorted(contours, key = cv2.contourArea, reverse = True)
for i in range(len(contours)):
contour = contours[i]
random.seed(i)
color = (255*random.random(),255*random.random(),255*random.random())
cv2.drawContours(img,[contour], -1, color, 3)
Если на вашем изображении слишком много контуров для 1 элемента, вы должны использовать метод расширения для того, чтобы «закрыть» ваши контуры:
img_dilate = cv2.dilate(image, cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1), (1, 1)))
Документация метода аппроксимации контура