Сегментация изображения в openCV

1

У меня есть образ дороги.

Я применил к нему цветовой порог и получил маску желтых и белых маркеров (cv2.inRange)

Затем я применил полученные контуры определенной области на маске, чтобы удалить шум (cv2.findContours)

Я получил хорошую маску, которая имеет белые, как полосы и черные везде.

Тем не менее, я не могу получить три полосы в отдельные массивы - я попробовал алгоритм водораздела, он дает мне границы полос, однако не разделяет их на разные массивы.

Мой желаемый результат состоит в том, чтобы иметь три отдельных массива, каждый из которых содержит все пиксельные номера каждой полосы.

Я тоже исказил изображение.

ниже снимок экрана является поразрядным и с маской и оригинальным искаженным изображением.

Изображение 174551

Теги:
opencv
image-processing
opencv-python

1 ответ

1
Лучший ответ

Вы можете найти контуры и заполнить их и использовать в качестве масок. Чтобы найти контуры, вы можете использовать cv2.findContours() в OpenCV. Вы можете найти пример в Документах OpenCV.
Как и в документах, вы можете получить контуры,

_, contours, _ = cv2.findContours(your_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

contours переменных будут иметь список контуров. В вашем случае каждая полоса будет добавлена в виде отдельных контуров.

Затем, как описано в этом ответе, вы можете создавать маски.

masks = []
for contour in contours:
    img = np.zeros( (height, width) ) 
    cv2.fillPoly(img, pts =[contours], color=(255,255,255))
    masks.append(img)

А также вы можете использовать функцию cv2.drawContours, задайте thickness=cv2.FILLED для создания масок.

модификация

Сначала убедитесь, что все черные области (0, 0, 0) в значениях rgb. Затем вы можете попробовать значения здесь для второго аргумента и значений здесь для третьего аргумента функции findContours().

  • 0
    О, верно, я тоже пробовал это, но пропустил, я получал много контуров (около 10-15 на изображение), есть ли способ отфильтровать их, чтобы получить только нужные?
  • 0
    А внесите изменения в ответ .. посмотрите, что ..
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню