У меня есть образ дороги.
Я применил к нему цветовой порог и получил маску желтых и белых маркеров (cv2.inRange
)
Затем я применил полученные контуры определенной области на маске, чтобы удалить шум (cv2.findContours
)
Я получил хорошую маску, которая имеет белые, как полосы и черные везде.
Тем не менее, я не могу получить три полосы в отдельные массивы - я попробовал алгоритм водораздела, он дает мне границы полос, однако не разделяет их на разные массивы.
Мой желаемый результат состоит в том, чтобы иметь три отдельных массива, каждый из которых содержит все пиксельные номера каждой полосы.
Я тоже исказил изображение.
ниже снимок экрана является поразрядным и с маской и оригинальным искаженным изображением.
Вы можете найти контуры и заполнить их и использовать в качестве масок. Чтобы найти контуры, вы можете использовать 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()
.