EmguCV и получение кадра без выделения памяти - C#
Формулировка задачи:
Привет всем!
Простая задача - получаем кадры в веб-камеры через EmguCV. Стандартный подход выглядит так:
Однако, как я понял, эта штука постоянно выделяет память под новый кадр, а для меня это критично. Раньше пользовался таким подходом:
После обновления метод cvReteiveFrame пропал. Как быть? Или QueryFrame теперь не выделяет память на каждом обращении?
Capture capture; var frame = capture.QueryFrame();
var ptr = CvInvoke.cvRetrieveFrame(capture.Ptr, 0); if (ptr == IntPtr.Zero) return null; var frame = (MIplImage)Marshal.PtrToStructure(ptr, typeof(MIplImage));
Решение задачи: «EmguCV и получение кадра без выделения памяти»
textual
Листинг программы
/// <summary>Retrieve a Gray image frame after Grab()</summary> /// <param name="image">The output image</param> /// <param name="channel">The channel to retrieve image</param> /// <returns>True if the frame can be retrieved</returns> public virtual bool Retrieve(IOutputArray image, int channel = 0) { if (this.FlipType == FlipType.None) { using (OutputArray outputArray = image.GetOutputArray()) return CvInvoke.cveVideoCaptureRetrieve(this.Ptr, (IntPtr) ((UnmanagedObject) outputArray), channel); } else { using (Mat mat = new Mat()) { using (OutputArray outputArray = mat.GetOutputArray()) { bool flag = CvInvoke.cveVideoCaptureRetrieve(this.Ptr, (IntPtr) ((UnmanagedObject) outputArray), channel); if (flag) CvInvoke.Flip((IInputArray) mat, image, this.FlipType); return flag; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д