OpenCv вопрос вычитания изображения? - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь вычесть 2 изображения, используя функцию cvAbsDiff (img1, img2, dest);это работает, но иногда, когда я подношу руку к голове или к телу, рука не ясна, и фон становится видимым ... фоновое изображение (голова) перекрывает мой передний план. (рука) ..

это работаетправильно на ровных поверхностях, т.е. когда фон даже похож на стену.

пожалуйста, посмотрите мое изображение ... чтобы вы могли лучше понять мою проблему ... !!!!

http://www.2shared.com/photo/hJghiq4b/bg_overlays_foreground.html

, если у вас есть решение / подсказка, пожалуйста, помогите мне .......

Ответы [ 2 ]

1 голос
/ 18 марта 2012

В вашем коде нет ничего плохого. Вычитание фона не является предпочтительным способом обнаружения движения или обнаружения, потому что оно не очень устойчиво. Проблема возникает потому, что и фон, и передний план имеют схожий цвет во многих регионах, что при вычитании выталкивает передний план назад. Вы можете попробовать использовать - оптический поток для обнаружения движения - Если ваша задача - просто определить силуэт или руку, попробуйте на нем применить классификатор HOG

Если вы не хотите пробовать новый подход. Вы можете попробовать поиграть с пороговым значением (в вашем случае 30). Так что, когда вы вычитаете подобное цветное изображение, разница составляет менее 30. А потом у тебя порог с 30, поэтому он просто отключается. Также вы можете попробовать HSV или другое цветовое пространство.

1 голос
/ 18 марта 2012

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

Какие два изображения вы вычитаете? Я выполнил вычитание последующих изображений (то есть изображений, снятых с задержкой в ​​доли секунды), и вычитание фона обычно приводит к краям движущихся объектов, например к краям руки, а не ко всему силуэту рука. Я предполагаю, что вы берете разницу текущего кадра и статического кадра запуска. Вполне возможно, что детали недостаточно отличаются (кожа + кожа).

Сегодня вечером у меня проблемы с компьютером, завтра я опробую их (пожалуйста, покажите, по крайней мере, шаги, которые вы на самом деле выполняете), и сообщу вам.


Я все еще не уверен, какова ваша конечная цель, хотя я предполагаю, что вы хотите сделать некоторое распознавание жестов (так как у вас есть вектор, называемый «пальцы»). Как сказал Manpreet, ваша самая большая проблема - это устойчивость, и это из-за предметов, имеющих одинаковый цвет.

Я воспроизвел ваше изображение, поместив свое лицо в статическое изображение сравнения, а затем переместив его. Если бы я начинал только с фона, он был уже намного более надежным и ни в коем случае не отображал никаких «наложений».

Быстрое исправление, убедитесь, что у вас есть чистое статичное изображение без объекта. В противном случае вы захотите получить динамическое изображение сравнения, самое простое - сравнить frame_n с frame_n-1. Как правило, это даст вам только движущиеся края, поэтому, если вам нужен весь силуэт, вы можете:

1) Используйте другой алгоритм сегментирования (что я рекомендую. Фоновое вычитание выполняется быстро, и вы можете использовать его, чтобы определить гораздо меньшую рентабельность инвестиций для поиска, а затем использовать другой алгоритм для более надежной сегментации.)

2) Попытайтесь найти компромисс между статическим и динамическим сравнением изображения, например, как среднее значение за последние 10 кадров или что-то в этом роде. Я не знаю, насколько хорошо это работает, но было бы довольно просто реализовать, стоит попробовать:).

Кроме того, попробуйте с CV_THRESH_OTSU вместо 30 в качестве порогового значения, посмотрите, нравится ли вам это больше.

Кроме того, я часто замечал выходные вспышки (области, которые не изменились, переключаются с черного на белый). Сверяясь с прямой трансляцией, я вполне уверен, что это из-за автофокусировки веб-камеры / настройки баланса белого и т. Д. Если вы это получаете, отключение автофокуса и т. Д. Должно помочь (что, кстати, не делается через openCV, но зависит от камеры. Возможно, проверьте это: Как программно отключить автофокус веб-камеры? )

...