Все, что я пытаюсь отобразить в кадре захваченных кадров в WPF. Я уже могу отображать изображение. Но не можете понять способ обработки событий? В WinForm это Application.Idle, но что я должен использовать в WPF? Я уже видел это thread .. Я не мог этого сделать.Захват камеры EMGU CV в WPF?
3
A
ответ
4
Почему вы не можете использовать Timer.Elapsed event?
Просто помните, что обратный вызов Elapsed происходит в Worker Thread, что делает невозможным обновление пользовательского интерфейса. Поэтому вы должны использовать SynchronizationContext, чтобы направить действия обновления пользовательского интерфейса в соответствующий поток.
private SynchronizationContext _context = SynchronizationContext.Current;
void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
using (Image<Bgr, byte> frame = capture.QueryFrame())
{
if (frame != null)
{
this._context.Send(o =>
{
using (var stream = new MemoryStream())
{
// My way to display frame
frame.Bitmap.Save(stream, ImageFormat.Bmp);
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(stream.ToArray());
bitmap.EndInit();
webcam.Source = bitmap;
}
},
null);
}
}
}
В качестве альтернативы, так как все задачи UI пройти через диспетчера, вы могли бы реагировать на DispatcherInactive событие:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//...
this.Dispatcher.Hooks.DispatcherInactive += new EventHandler(Hooks_DispatcherInactive);
}
void Hooks_DispatcherInactive(object sender, EventArgs e)
{
using (Image<Bgr, byte> frame = capture.QueryFrame())
{
if (frame != null)
{
using (var stream = new MemoryStream())
{
// My way to display frame
frame.Bitmap.Save(stream, ImageFormat.Bmp);
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(stream.ToArray());
bitmap.EndInit();
webcam.Source = bitmap;
};
}
}
}
Смежные вопросы
- 1. Как слить обнаруженные ребра в захват цвета в Emgu CV
- 2. Emgu CV проверить подключение веб-камеры
- 3. неспособного исключения поймать новый захват emgu CV C#
- 4. Гомография в Emgu CV 3.0
- 5. захватить видео из файла emgu cv 2.4.10
- 6. Как получить видеопоток с веб-камеры в emgu cv?
- 7. Захват веб-камеры с открытым CV
- 8. Точка отслеживания Emgu cv?
- 9. Reshape in emgu cv
- 10. Hog descriptor emgu cv
- 11. EMGU CV Exception
- 12. Rectangle - Emgu CV
- 13. Emgu CV обнаружение улыбки
- 14. Emgu CV Ошибка SURFFeature
- 15. Камера с фокусом в EMGU CV
- 16. Emgu CV не удалось создать захват из потока RTSP (H264), ip-камеры
- 17. Рисунок на emgu cv C++
- 18. Портретный режим в Emgu CV
- 19. Функция Matrix.Reshape() в Emgu CV
- 20. Emgu cv показывает поток веб-камеры как переворачиваемое изображение
- 21. Emgu CV blob обнаружение в сером изображении
- 22. Фоновая подзадача с использованием Emgu cv
- 23. Загрузить тренировку SVM - Emgu CV
- 24. Emgu cv save CircleF as
- 25. Emgu CV не обнаруживает CUDA
- 26. Emgu CV draw rotated rectangle
- 27. Harris corner using Emgu CV
- 28. EMGU CV SURF совпадение изображений
- 29. Emgu CV load load notworking
- 30. Как установить упаковку Emgu CV?
Может быть, лучшим решением является сочетание обоих подходов: слушать диспетчерский бездействия, но не делают кадр до истечения определенного периода. –
Как называется функция Timer_Elapsed? – Jonathan
Вы настраиваете таймер с использованием класса Timer, который имеет событие Elapsed. https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx –