Следящая система с помощью веб-камеры с использованием алгоритма выделения края - 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);
/////////////////// }
}
}
}