Получить снимок из потокового видео (новичок)

#c# #video-streaming #video-processing #emgucv

#c# #потоковое видео #обработка видео #emgucv

Вопрос:

У меня есть видеопроигрыватель, написанный с использованием Emgu (.net-оболочка для OpenCV), и я фиксирую кадры и выполняю некоторые операции с определенными кадрами. В разделе «Функциональность» я позволяю пользователю делать снимок потокового видео и выделять разделы снимка в другой форме.

Однако, поскольку видеопроигрыватель воспроизводится под изображением в дочерней форме, оно также обновляется по мере того, как пользователь рисует в форме. Это нежелательно. Я почти уверен, что это как-то связано с моей блокировкой и разблокировкой, и я новичок в этом.

Есть идеи, где я ошибаюсь? Я бы подумал, что блокировка (bmpFrame) предотвратила бы любые обновления, но это не так:

  private void btnTag_Click(object sender, EventArgs e)
    {
        if (_video != null amp;amp; _video.CurrentFrame != null)
        {
            try
            {
                using (Bitmap bmpFrame = (Bitmap)_video.CurrentFrame.Bitmap)
                {
                    lock (bmpFrame)
                    {
                        TagForm f = new TagForm(bmpFrame);
                        f.Show();
                    }
                }
            }
            catch { };
        }
    }
  

Комментарии:

1. lock(obj) просто предотвращает выполнение более одного lock(obj) предложения в любой момент времени.

Ответ №1:

аааа! глупый я, это действительно был недосмотр. Исправлено путем выделения новой памяти для нового растрового изображения

 using (Bitmap bmpFrame = new Bitmap(_video.CurrentFrame.Bitmap)
{

   lock (bmpFrame)
   {
       TagForm f = new TagForm(bmpFrame);
       f.Show();
   }

}
  

Комментарии:

1. Надеюсь, это поможет новичку на моем месте.