Использование OpenCV для обнаружения дорожных знаков различной формы в режиме реального времениC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование OpenCV для обнаружения дорожных знаков различной формы в режиме реального времени

Сообщение Anonymous »

Я пытаюсь создать приложение, которое могло бы обнаруживать дорожные знаки с помощью камеры. Однако я сталкиваюсь с некоторыми трудностями при обнаружении знака.

Поскольку дорожные знаки могут быть разного цвета, я надеюсь сначала определить форму знака.

Я попытался сначала найти все контуры и попытаться определить форму каждого контура. Однако контур знака недостаточно четкий, а фон дерева содержит множество мелких контуров, которые могут повлиять на обнаружение. Так что программа не способна найти полный контур дорожного знака. Я знаю, что использование fastNlMeansDenoisingColored() из openCV может значительно убрать шум и сделать обнаружение более точным. Но это слишком медленно для обработки в реальном времени.

Я проверяю не только круговые знаки, но также треугольные или четырехугольные знаки. Поэтому я надеюсь сначала найти контур всех объектов и попытаться проверить форму объекта.

Вот код, который я использовал для поиска контуров внутри изображения. , и это результат. Я собираюсь разработать приложение для iOS, поэтому оно находится в Objective-C.

Код: Выделить всё

- (cv::Mat)findSigns:(cv::Mat)src {
Mat edge;
Mat src_gray;
cvtColor(src, src_gray, COLOR_RGB2GRAY);
medianBlur(src_gray, src_gray, 5);
Canny(src_gray, edge, 80, 80, 3);
Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
Mat dilated;
cv::dilate(edge, dilated, kernel);
std::vector contours;
std::vector hierarchy;
RNG rng(12345);
cv::findContours(edge, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
Scalar color = Scalar(255, 0, 255);
for(int i = 0; i 100) {
drawContours(src, contours, i, color, 2, 8, hierarchy);
}
}

edge.release();
src_gray.release();
kernel.release();
dilated.release();

return src;
}
исходное изображение:

[img]https://i. sstatic.net/MNJQ3.png[/img]


[img]https://i.sstatic .net/37rOh.png[/img]


Поскольку контуров слишком много, я попробовал удалить контуры небольшой площади. И вот результат.

Изображение


Кроме того, я также попытался проверить, есть ли иерархия[2] == -1, чтобы увидеть, есть ли замкнутые контуры. Но все они равны -1.

Могу ли я узнать, как мне определить форму дорожных знаков? Должен ли я удалить фон дерева, удалив зеленый объект для облегчения обнаружения?

Подробнее здесь: https://stackoverflow.com/questions/532 ... -real-time
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»