Помещение соответствующего кода поможет. Также зная, чего вы на самом деле пытаетесь достичь.
Какие два изображения вы вычитаете? Я выполнил вычитание последующих изображений (то есть изображений, снятых с задержкой в доли секунды), и вычитание фона обычно приводит к краям движущихся объектов, например к краям руки, а не ко всему силуэту рука. Я предполагаю, что вы берете разницу текущего кадра и статического кадра запуска. Вполне возможно, что детали недостаточно отличаются (кожа + кожа).
Сегодня вечером у меня проблемы с компьютером, завтра я опробую их (пожалуйста, покажите, по крайней мере, шаги, которые вы на самом деле выполняете), и сообщу вам.
Я все еще не уверен, какова ваша конечная цель, хотя я предполагаю, что вы хотите сделать некоторое распознавание жестов (так как у вас есть вектор, называемый «пальцы»).
Как сказал Manpreet, ваша самая большая проблема - это устойчивость, и это из-за предметов, имеющих одинаковый цвет.
Я воспроизвел ваше изображение, поместив свое лицо в статическое изображение сравнения, а затем переместив его. Если бы я начинал только с фона, он был уже намного более надежным и ни в коем случае не отображал никаких «наложений».
Быстрое исправление, убедитесь, что у вас есть чистое статичное изображение без объекта.
В противном случае вы захотите получить динамическое изображение сравнения, самое простое - сравнить frame_n с frame_n-1. Как правило, это даст вам только движущиеся края, поэтому, если вам нужен весь силуэт, вы можете:
1) Используйте другой алгоритм сегментирования (что я рекомендую. Фоновое вычитание выполняется быстро, и вы можете использовать его, чтобы определить гораздо меньшую рентабельность инвестиций для поиска, а затем использовать другой алгоритм для более надежной сегментации.)
2) Попытайтесь найти компромисс между статическим и динамическим сравнением изображения, например, как среднее значение за последние 10 кадров или что-то в этом роде. Я не знаю, насколько хорошо это работает, но было бы довольно просто реализовать, стоит попробовать:).
Кроме того, попробуйте с CV_THRESH_OTSU вместо 30 в качестве порогового значения, посмотрите, нравится ли вам это больше.
Кроме того, я часто замечал выходные вспышки (области, которые не изменились, переключаются с черного на белый). Сверяясь с прямой трансляцией, я вполне уверен, что это из-за автофокусировки веб-камеры / настройки баланса белого и т. Д. Если вы это получаете, отключение автофокуса и т. Д. Должно помочь (что, кстати, не делается через openCV, но зависит от камеры. Возможно, проверьте это: Как программно отключить автофокус веб-камеры? )