В зависимости от версии OpenCV, функция поиска контуров работает по разному. После cv2.findContours(), у меня написано contours=contours[1] В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]
Появляется ошибка при запуске на 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'
Очень неудачно выбраны разные типы знаков для демонстрации. Попробуйте распознать, например, круглые синие знаки: поворот налево, поворот направо и прямо. Уверен, что результат не будет такой однозначный. Нужно сделать вначале кластеризацию по цвету и типу ограничивающей геометрической фигуры. В таком случае нам придется между собой сравнивать, например, синие круги только с синими кругами. Также нужно ввести аффинные преобразования, например билинейные, этого достаточно, определив, по какой оси имеется деформация. Также можно не делать отдельно эрозию и дилатацию, а применить функцию morphologyEx с параметром MORPH_CLOSE . Также мне кажется, что лучше делать не попарное сравнение одинаковых точек, а вычитать знак из эталона и анализировать оставшиеся ненулевые точки, для каждого типа знака это будет свой порог. Например при разрешении 32х32 для синих круглых знаков пороговое значение будет около 30, а для знака "кирпич" - около 50. И вообще этот алгоритм будет работать только в идеальных условиях: при хорошем освещении, когда знак не искажен. В реальной жизни нет альтернативы сверточной нейронной сети.
Ответ: 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."
В зависимости от версии OpenCV, функция поиска контуров работает по разному.
После cv2.findContours(), у меня написано contours=contours[1]
В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]
Спасибо за урок всё наглядно и последовательно объяснено.
Очень круто! Хоть мне и 11 лет но я все понял, потому , что все очень хорошо обьясено! Спасибо за эти видео!
Мы старались, спасибо большое.
Такие комментарии вдохновляют. Ради них хочется работать. ⭐️
Спасибо! Очень наглядно, логично и динамично! Один минус - очень мелкий шрифт. Удачи Вам!
Поработайте пожалуйста над своим стилей написания кода. Неудобно воспринимать код, когда между операторами или аргументами нет пробелов.
Появляется ошибка при запуске на 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)
@@EgorMakarov89, если не знаешь разницу между cv и cv2 - не лезь в этот курс. Лучше изучи Python.
такая же ошибка что делать
У меня была такая же проблема. Всё стало работать после того как я заменил contours = contours[1] на contours = contours[0]
Видео очень полезно, но музыкальные вставки очень сильно раздражает когда ты сидишь ночью и оно заиграло
Да, нам все уже сказали. Приносим свои извинения. Все следующие ролики мы монтируем без этого.
@@avt.global или в наушниках))
Спасибо, очень познавательно! Жалко раньше ролик не выпустили! А так вы молодец(цы)! Успехов в вашем деле!
Спасибо! Но шрифт бы больше(
Очень неудачно выбраны разные типы знаков для демонстрации. Попробуйте распознать, например, круглые синие знаки: поворот налево, поворот направо и прямо. Уверен, что результат не будет такой однозначный. Нужно сделать вначале кластеризацию по цвету и типу ограничивающей геометрической фигуры. В таком случае нам придется между собой сравнивать, например, синие круги только с синими кругами. Также нужно ввести аффинные преобразования, например билинейные, этого достаточно, определив, по какой оси имеется деформация. Также можно не делать отдельно эрозию и дилатацию, а применить функцию morphologyEx с параметром MORPH_CLOSE . Также мне кажется, что лучше делать не попарное сравнение одинаковых точек, а вычитать знак из эталона и анализировать оставшиеся ненулевые точки, для каждого типа знака это будет свой порог. Например при разрешении 32х32 для синих круглых знаков пороговое значение будет около 30, а для знака "кирпич" - около 50. И вообще этот алгоритм будет работать только в идеальных условиях: при хорошем освещении, когда знак не искажен. В реальной жизни нет альтернативы сверточной нейронной сети.
Максим, наша целевая аудитория - учащиеся общеобразовательных школ. К сожалению, они ничего не поймут в афинных билинейных преобразованиях.
@@avt.global Так, сам школьник. Я из Нижнего Новгорода, учусь в 38 лицее. Учусь в 11 классе, а это я начал делать ещё в 9-м классе
@@МаксимБушуев-ы2ь сравнить 38 лицей и общеобразовательную школу - это, конечно, мощно)
Здравствуйте, есть ли у вас или знаете ли программы(на Python ) для распознавания дорожных знаков?
для чего нужно преобразовывать в 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, после этого выполняйте бинаризацию и всё получится!
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'
6:07