2014-01-13 2 views
1

Я просто реализовал GrapCV-алгоритм (OpenCV, C++, Visual Studio 12):Улучшение Grabcut в OpenCV

grabCut (* изображение, маска, прямоугольник, bgdModel, fgdModel, 1, GC_INIT_WITH_MASK );

Я использовал его для сегмента следующую картину:

enter image description here

Мой результат:

enter image description here

Мой вопрос: Как я могу теперь улучшить алгоритм, чтобы можно было видеть только обоих игроков? Моя первая идея заключалась в изменении глубины цветов, но я не знаю, как отправить ее на «grabCut». Или есть другие способы?

+1

читать [это] (http://stackoverflow.com/questions/14111716/how-to-set-a-mask-image-for-grabcut-in-opencv/14124334#14124334). Выделите каждого человека своим прямоугольником и установите граничные пиксели в качестве фона. – William

+0

Хорошая идея, спасибо! Проблема в том, что мой результат должен быть очень удобным: пользователь должен отмечать только одним прямоугольником, чтобы получить его результат. –

+0

Используйте детектор объекта внутри этой пользовательской области и затем сегментируйте, как сказано. – William

ответ

-1

В папке opencv2.4.6/samples/cpp есть много файлов, которые демонстрируют использование некоторых классических алгоритмов. Существует файл с именем grabcut.cpp, в котором рассказывается, как применить этот алгоритм к вашему приложению в деталях. Так что вам нужно просто вставить этот файл в свою программу.

Если у вас есть другие вопросы, просто отлаживайтесь с помощью grabcut.cpp, и вы увидите, как это работает в деталях. И если вы хотите реализовать это самостоятельно. вам необходимо изменить функцию с новым параметром GC_EVAL или GC_INIT_WITH_MASK.

grabCut(image, // input image 
    mask, // segmentation mask 
    rect,// rectangle containing foreground 
    bgModel,fgModel, // models 
    2,  // number of iterations 
    GC_INIT_WITH_RECT); // use rectangle 
Смежные вопросы