Обнаружение формы при обработке изображения - PullRequest
1 голос
/ 04 апреля 2010

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

Как я могу это сделать? Форма может быть из человека / автомобиля / коробки и т.д. Пожалуйста, помогите

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Для точного определения формы вам нужно использовать обнаружение haar или, по крайней мере, K ближайшего соседа. Обнаружение Хаара может быть очень точным, но настройка занимает много времени. K ближайшего соседа легче настроить, но он не такой точный. Проверьте это видео на YouTube . Этот парень использует KNN для обнаружения различных жестов рук. Обратите внимание, что сравниваемое изображение в основном является черным пятном. Плохая вещь в KNN заключается в том, что для запуска программы требуется гораздо больше ресурсов, но при обнаружении haar основная обработка уже была выполнена при создании каскадных XML-файлов с помощью haartraining.exe

2 голосов
/ 06 апреля 2010

Я не уверен, какова ваша конечная цель, как сказал амфетахин, но довольно распространенным подходом для обнаружения фигур может быть использование cvFindContours , которое дает двоичное изображение и возвращает набор 'CvContour '(который фактически является cvSeq).Двоичное изображение может быть получено довольно просто путем установки порогового значения изображения (cvThreshold).Посмотрите на пример contours.c в каталоге sample / of opencv src.Также проверьте эту ссылку:

Noah (2009) opencv tutorial

этот пример кода даст вам общее представление:

cvThreshold( g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY );
cvFindContours( g_gray, g_storage, &contours );
cvZero( g_gray );
if( contours ){
    cvDrawContours(
        g_gray,
        contours,
        cvScalarAll(255),
        cvScalarAll(255),
        100 );
}
cvShowImage( "Contours", g_gray );

Один разу вас есть кодировка контура, который вы можете использовать cvMatchShapes , который принимает 2 контура и возвращает меру сходства между этими контурами.

Надеюсь, этот подход обеспечит вам быстрый старт!

...