Как улучшить извлечение переднего плана с помощью cv2.grabcut

#opencv #computer-vision #image-segmentation #background-subtraction

#opencv #компьютерное зрение #сегментация изображения #вычитание фона

Вопрос:

Извлечение переднего плана

Я извлекаю человека из его фона, и для этого я использую cv2.grabcut. Но иногда фоновые пиксели ошибочно классифицируются как передний план, следовательно, извлечение не идеально. Я прикрепил полученное изображение. Как улучшить это извлечение?

Комментарии:

1. Вы должны предоставить исходное изображение и минимальный код воспроизведения. В противном случае мы можем дать только несколько советов.

Ответ №1:

Чтобы улучшить извлечение, вам нужно поиграть с iterCount и mode параметрами.

  • Например:

У меня есть следующее изображение:


введите описание изображения здесь

введите описание изображения здесь

  • Могу ли я улучшить, изменив iterCount ?

    • iterCount = 10, 20 (соответственно)

    введите описание изображения здесьвведите описание изображения здесь

    • iterCount = 30, 40 (соответственно)

    введите описание изображения здесьвведите описание изображения здесь

  • Могу ли я улучшить, изменив режимы?


    mode = GC_INIT_WITH_RECT , GC_INIT_WITH_MASK (соответственно)

    введите описание изображения здесь введите описание изображения здесь

В моем случае GC_INIT_WITH_MASK работает хорошо, но я сказал, что вам нужно изменять параметры, пока не будет получен удовлетворительный результат.

Комментарии:

1. На основе предоставленного вами кода маска была создана вручную с помощью paint. Я ищу что-то, что не требует ручного вмешательства

2. Вам не обязательно использовать GC_INIT_WITH_MASK, возможно, GC_INIT_WITH_RECT работает лучше

3. Я использую только GC_INIT_WITH_RECT, поскольку я обнаруживаю человека посредством обнаружения объекта и передаю его координаты в grabcut для извлечения