EmguCV и получение кадра без выделения памяти - C#

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

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

Привет всем! Простая задача - получаем кадры в веб-камеры через EmguCV. Стандартный подход выглядит так:
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));
После обновления метод cvReteiveFrame пропал. Как быть? Или QueryFrame теперь не выделяет память на каждом обращении?

Решение задачи: «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;
          }
        }
      }
    }

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


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

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

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