Поскольку дорожные знаки могут быть разного цвета, я надеюсь сначала определить форму знака.
Я попытался сначала найти все контуры и попытаться определить форму каждого контура. Однако контур знака недостаточно четкий, а фон дерева содержит множество мелких контуров, которые могут повлиять на обнаружение. Так что программа не способна найти полный контур дорожного знака. Я знаю, что использование 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