Следящая система с помощью веб-камеры с использованием алгоритма выделения края - 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); /////////////////// } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д