Как настроить обнаружение движения с помощью AForge?

Я пытаюсь настроить обнаружение движения с помощью платформы AForge.NET. Я использую информацию, представленную на этой странице.

Я настроил видеопоток DirectShow, который передает часть моего рабочего стола через поток. Я могу выбрать этот поток в примере проекта видеоплеера, который поставляется с AForge. (а я вижу свой рабочий стол через плеер).

Однако, когда я запускаю приведенный ниже код, я получаю исключение NullReferenceException. Что мне не хватает?

    // New frame received by the player
    private void videoSourcePlayer_NewFrame( object sender, ref Bitmap image )
    {
        if (this.detector.ProcessFrame(image) > 0.02)
        {
            Console.WriteLine("Motion");
        }
        else
        {
            Console.WriteLine("No motion");
        }
    }

detector инициализируется как частная переменная класса при выборе видеопотока.

    private MotionDetector detector;
    private BlobCountingObjectsProcessing motionProcessor;

    // Open video source
    private void OpenVideoSource( IVideoSource source )
    {
        BlobCountingObjectsProcessing motionProcessor = new BlobCountingObjectsProcessing();

        MotionDetector detector = new MotionDetector(
            new SimpleBackgroundModelingDetector(),
            motionProcessor);
    }

person Ropstah    schedule 19.12.2009    source источник


Ответы (1)


Взгляните на BlobCountingObjectsProcessing motionProcessor, кажется, вы дважды объявили переменную, один раз не инициализированную и один раз инициализированную.

Одна область действия внешнего метода и одна область действия внутреннего метода.

Я думаю, что именно отсюда исходит ваше исключение NullReferenceException.

person Tony The Lion    schedule 19.12.2009