Следящая система с помощью веб-камеры с использованием алгоритма выделения края - C#

Узнай цену своей работы

Формулировка задачи:

Делаю программу для диплома на подобие следящей системы с помощью веб-камеры с использованием алгоритма выделения края. Получаем изображение веб-камеры на PictureBox, а подключаемся с помощью библиотеки AForge. Опишу принцип работы программы и то что сделал: допустим на полученном изображении с веб-камеры размещено несколько объектов потом мы выделяем эти объекты Оператором Кэнни, а дальше пользователю надо выбрать мышкой за каким объектом следить программе. правой кнопкой мышки мы можем выделять овальные объекты а левой кнопкой мышки прямоугольные ну а потом начинать следить, если, например, объект сместилса с места то мы скриним изображение. Так вот мне осталось реализовать слежение за обектом, возможно ли так сделать как я написал? Как я понимаю, для слежения можно сравнивать пиксели, только как сделать чтобы это сравнение выполняло определеного участка пикселей на PictureBox'e, тоисть того участка что мы выделяем мышкой? Прилагаю исходник проэктаWebCam_Diplom.rar

Решение задачи: «Следящая система с помощью веб-камеры с использованием алгоритма выделения края»

textual
Листинг программы
private void videoSourcePlayer_NewFrame(object sender, ref Bitmap image)
        {
            lock (this)
            {
                if (detector != null)
                {
                    float motionLevel = detector.ProcessFrame(image);
 
                    if (motionLevel > motionAlarmLevel)
                    {
                        // flash for 2 seconds
                        flash = (int)(2 * (1000 / alarmTimer.Interval));
                    }
 
                    // check objects' count
                    if (detector.MotionProcessingAlgorithm is BlobCountingObjectsProcessing)
                    {
                        BlobCountingObjectsProcessing countingDetector = (BlobCountingObjectsProcessing)detector.MotionProcessingAlgorithm;
                    }
 
                    // HERE!!!
 
                    objectCenterLabel.Text = string.Format("Center: {0}", _colorDetection.Center);
 
                    Rectangle a = _colorDetection.BoundsBox;
                    objectsBoundaryLabel.Text = string.Format("Left:{0}, Top:{1}, Right:{2}, Bottom:{3}", a.Left, a.Top, a.Right, a.Bottom);
///////////////////вот иза этого куска кода выскакует ошибка
///////////////////                   Color newColor = _colorDetection.ObjectColor;
///////////////////
///////////////////                    BeginInvoke(_changeColorDelegate, newColor);
///////////////////
///////////////////                    // accumulate history
///////////////////                    motionHistory.Add(motionLevel);
///////////////////                    if (motionHistory.Count > 300)
///////////////////                   {
///////////////////                        motionHistory.RemoveAt(0);
///////////////////                    }                    
                }
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы