2016-10-13 8 views
0

Я использую OpenCV4Android версии 3.1.0, и я хочу удалить фон в каждом кадре, снятом с камеры Android. Я сослался на некоторые должности и то, что я понял, есть, так как фон должен быть удален из нестатического фона «Android Camera» я должен использовать «createBackgroundSubtractorMOG2»Как использовать createBackgroundSubtractorMOG2

согласно примеру, я использую «createBackgroundSubtractorMOG2» как показано в приведенном ниже коде. Но во время выполнения, независимо от смены фона в кадре, извлеченного из камеры, я получаю маску «fgmask» всегда содержит белое изображение.

пожалуйста, дайте мне знать, как использовать createBackgroundSubtractorMOG2

Код:

//use createBackgroundSubtractorMOG2 
fgmask = new Mat(); 
BackgroundSubtractorMOG2 bgs = Video.createBackgroundSubtractorMOG2(30, 16, false); 
bgs.apply(mMatInputFrame,fgmask,0); 

//to display the mask 
final Bitmap bitmap = Bitmap.createBitmap(this.mMatInputFrame.cols(), this.mMatInputFrame.rows(), Bitmap.Config.ARGB_8888); 
Utils.matToBitmap(this.fgmask, bitmap); 
getActivity().runOnUiThread(new Runnable() { 
@Override 
public void run() { 
mIVEdges.setImageBitmap(bitmap); 
} 
}); 
+1

Вы переезжаете камеру? – Miki

+0

да .. и не могли бы вы рассказать мне, почему он задал этот вопрос? – user2121

+1

Да. Если фон меняется (потому что вы перемещаете камеру), чем вычитание фона не будет работать! Статический фон является обязательным для правильной работы – Miki

ответ

0

Как говорит @Miki, вы не можете использовать этот метод, если ваш фон не является статичным.

BackgroundSubtractorMOG2 использует модель гауссовой смеси для моделирования фона, поэтому она может адаптироваться к незначительным изменениям на ней (подсветка, новые статические объекты и т. Д.), Но она не может адаптироваться к полностью динамическому фону.

Но если вы все еще хотите попробовать, вот как вы можете использовать его:

public class MOG2Subtractor { 

    private final static double LEARNING_RATE = 0.01; 

    private BackgroundSubtractorMOG2 mog; 
    private Mat foreground; 

    public MOG2Subtractor() { 
     mog = Video.createBackgroundSubtractorMOG2(); 
     foreground = new Mat(); 
     // You can configure some parameters. For example: 
     mog.setDetectShadows(false); 
    } 

    public Mat process(Mat inputImage) { 
     mog.apply(inputImage, foreground, LEARNING_RATE); 
     return foreground; 
    } 
} 

Здесь у вас есть все параметры и их значение: BackgroundSubtractorMOG2

+0

Я попробовал ваш exaample, и я все еще получаю только белый forground – user2121

+0

Здесь у меня есть пример приложения, в котором реализованы четыре алгоритма вычитания фона (включая MOG2): [BackgroundSub] (https://github.com/davidmigloz/go-bees -prototypes/дерево/ведущий/2_BackgroundSub). Проверь это. –