Как сделать видео (.mp4 / .avi) из потока изображений, отображаемых в окне изображения emgu cv? - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь сделать приложение для распознавания лиц с функцией записи.Он будет действовать как камера видеонаблюдения, но с распознаванием лиц.Я использовал imagebox emgu для отображения потока изображений с моей веб-камеры.Моя проблема заключается в том, как преобразовать поток изображений в видеофайл, а затем сохранить его в локальном каталоге?Большое спасибо.

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

Я использовал следующий код для отображения потока изображений с моей веб-камеры:

Capture grabber; //declaration

// initialization

grabber = new Capture();
grabber.QueryFrame();
Application.Idle += new EventHandler(FrameGrabber);

Здесь я получил код для распознавания лиц: https://www.codeproject.com/Articles/239849/Multiple-face-detection-and-recognition-in-real

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

1 Ответ

0 голосов
/ 17 апреля 2019

Я использовал класс видеоадаптера.

код в моей кнопке записи:

if(grabber == null)
            {
                return;
            }
            recording = true;
            int fps = Convert.ToInt32(grabber.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS));
            int foucc = CvInvoke.CV_FOURCC('X', 'V', 'I', 'D');
            int width = Convert.ToInt32(grabber.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH));
            int height = Convert.ToInt32(grabber.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT));
            writer = new VideoWriter(path+".avi", foucc, 10, 364, 293, true);

код в моей кнопке остановки записи:

        recording = false;
        if(writer != null)
        {
            writer.Dispose();
        }

код в моей кнопке выбора каталога:

        SaveFileDialog save = new SaveFileDialog();
        if(save.ShowDialog() == DialogResult.OK)
        {
            path = save.FileName;
            btnRecord.Enabled = true;
            btnStop.Enabled = true;
        }

Другой найденный мной обходной путь - использовать библиотеку записи экрана.

...