Детектирование дорожных знаков по цветам
HTML-код
- Опубликовано: 24 июн 2018
- Вторая часть видео-курса по компьютерному зрению в беспилотном автомобиле. Задача курса - дать возможность всем желающим быстро и без глубокой теоретической подготовки научиться реализовывать простейшие алгоритмы компьютерного зрения с использованием библиотек OpenCV и применить их в Открытом Кубке России по программированию беспилотного автомобиля: newgen.education/rosdc
В зависимости от версии OpenCV, функция поиска контуров работает по разному.
после cv2.findContours(), у меня написано contours=contours[1]
В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]
Это видео:
- НЕ учебник по программированию на Python
- НЕ пособие по академическому программированию компьютерного зрения
- НЕ инструкция к использованию OpenCV
По всем этим темам есть подробные специализированные образовательные материалы, и для глубокого изучения мы рекомендуем воспользоваться ими. Наша целевая аудитория: учащиеся 6-11 классов, их наставники и студенты вузов.
Организаторы Russian Open Self Driving Cup - ООО "АСРоботикс", Кружковое движение НТИ и проект "Школа новых технологий"
В зависимости от версии OpenCV, функция поиска контуров работает по разному.
После cv2.findContours(), у меня написано contours=contours[1]
В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]
Спасибо за урок всё наглядно и последовательно объяснено.
Очень круто! Хоть мне и 11 лет но я все понял, потому , что все очень хорошо обьясено! Спасибо за эти видео!
Мы старались, спасибо большое.
Такие комментарии вдохновляют. Ради них хочется работать. ⭐️
Спасибо! Очень наглядно, логично и динамично! Один минус - очень мелкий шрифт. Удачи Вам!
Поработайте пожалуйста над своим стилей написания кода. Неудобно воспринимать код, когда между операторами или аргументами нет пробелов.
Спасибо, очень познавательно! Жалко раньше ролик не выпустили! А так вы молодец(цы)! Успехов в вашем деле!
Видео очень полезно, но музыкальные вставки очень сильно раздражает когда ты сидишь ночью и оно заиграло
Да, нам все уже сказали. Приносим свои извинения. Все следующие ролики мы монтируем без этого.
@@avt.global или в наушниках))
Очень неудачно выбраны разные типы знаков для демонстрации. Попробуйте распознать, например, круглые синие знаки: поворот налево, поворот направо и прямо. Уверен, что результат не будет такой однозначный. Нужно сделать вначале кластеризацию по цвету и типу ограничивающей геометрической фигуры. В таком случае нам придется между собой сравнивать, например, синие круги только с синими кругами. Также нужно ввести аффинные преобразования, например билинейные, этого достаточно, определив, по какой оси имеется деформация. Также можно не делать отдельно эрозию и дилатацию, а применить функцию morphologyEx с параметром MORPH_CLOSE . Также мне кажется, что лучше делать не попарное сравнение одинаковых точек, а вычитать знак из эталона и анализировать оставшиеся ненулевые точки, для каждого типа знака это будет свой порог. Например при разрешении 32х32 для синих круглых знаков пороговое значение будет около 30, а для знака "кирпич" - около 50. И вообще этот алгоритм будет работать только в идеальных условиях: при хорошем освещении, когда знак не искажен. В реальной жизни нет альтернативы сверточной нейронной сети.
Максим, наша целевая аудитория - учащиеся общеобразовательных школ. К сожалению, они ничего не поймут в афинных билинейных преобразованиях.
@@avt.global Так, сам школьник. Я из Нижнего Новгорода, учусь в 38 лицее. Учусь в 11 классе, а это я начал делать ещё в 9-м классе
@@user-ry8rz5wo3l сравнить 38 лицей и общеобразовательную школу - это, конечно, мощно)
Здравствуйте, есть ли у вас или знаете ли программы(на Python ) для распознавания дорожных знаков?
Появляется ошибка при запуске на 28:50 мин, с чем она может быть связана?
cv.drawContours(frame, contours, -1, (0, 255, 0), 3)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2509: error: (-215:Assertion failed) npoints > 0 in function 'cv::drawContours'
Это я с cv2 попробовал, с cv тоже самое
ctr = np.array(contours).reshape((-1, 1, 2)).astype(np.int32)
cv.drawContours(frame, contours, 0, (0, 255, 0), 3)
@@user-dt9vo8sh3k, если не знаешь разницу между cv и cv2 - не лезь в этот курс. Лучше изучи Python.
такая же ошибка что делать
У меня была такая же проблема. Всё стало работать после того как я заменил contours = contours[1] на contours = contours[0]
для чего нужно преобразовывать в hsv?
Ответ:
Why is color segmentation easier on HSV
"The big reason is that it separates color information (chroma) from intensity or lighting (luma). Because value is separated, you can construct a histogram or thresholding rules using only saturation and hue. This in theory will work regardless of lighting changes in the value channel. In practice it is just a nice improvement. Even by singling out only the hue you still have a very meaningful representation of the base color that will likely work much better than RGB. The end result is a more robust color thresholding over simpler parameters."
Как у вас выделяется синий и одновременно красный
Переведите изображение в цветовое пространство HSV, после этого выполняйте бинаризацию и всё получится!
Спасибо! Но шрифт бы больше(
6:07
cv.drawContours(frame, contours, -1, (255,0,255), 3)
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2508: error: (-215:Assertion failed) npoints > 0 in function 'cv::drawContours'