EmguCV очень плохая производительность при запросе кадров с высоким разрешением - PullRequest
0 голосов
/ 10 ноября 2011

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

Capture cap;
private void Form1_Load(object sender, EventArgs e)
{
    cap = new Capture();
    cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 1280);
    cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 720);
    timer1.Interval = 20;
    timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
    Image<Bgr, byte> img = cap.QueryFrame();
    pictureBox1.Image = img.Bitmap;
}

, а затем я выполняю некоторые операции, такие как отслеживание объектов, но это имеет очень плохую производительность, я имею в виду каждые 200мс Я получаю новый кадр при удалении строк 5,6, которые устанавливают ширину, высоту, я получаю очень хорошую производительность ...

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

1 Ответ

5 голосов
/ 14 ноября 2011

Использование таймера для получения изображений с веб-камеры не рекомендуется, поскольку это приводит к снижению производительности. Гораздо лучше получить кадр, когда ваша программа делает очень мало, то есть не обрабатывает кадр. Посмотрите на пример кода CameraCaptue для справки, но ваш код должен выглядеть примерно так:

Capture cap;
private void Form1_Load(object sender, EventArgs e)
{
    cap = new Capture();
    cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 1280);
    cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 720);
    Application.Idle += ProcessFrame;
}
private void ProcessFrame(object sender, EventArgs arg)
{
    Image<Bgr, Byte> frame = _capture.QueryFrame();
    pictureBox1.Image = img.Bitmap;
}

С помощью этого метода вы не ограничены тем, как быстро работает таймер, а тем, что делает ваша программа, и как быстро ваша камера может получать кадры с разрешением. Так как это довольно высокое разрешение (720p), я бы ожидал 15 FPS, если вы не заплатили за тип с более высокой частотой кадров.

Надеюсь, это поможет,

Приветствия

Chris

...