Выберите из видеопотока все изображения, разделенные заданным интервалом выборки. OPENCV - PullRequest
2 голосов
/ 03 января 2012

Я использую OpenCV для проекта, но я начинающий.

У меня есть видеофайл в моем хранилище большой памяти, и я хочу написать метод для доступа ко всем кадрам видеопотока, которые разделены заданным интервалом выборки на входе.

Видео может быть в нескольких форматах (AVI - WMV - MPEG-2 - MPEG-4).

Я думал, что метод должен работать так:

1. Have as input a desired sampling interval
2. Access the video at timestamp corresponding to the sampling interval
3. Save selected frame of video as an image
4. Go to next frame as determined from sampling frequency.

Не могли бы вы помочь мне предоставить некоторый код или хотя бы указания на способ реализации такого метода с помощью методов OpenCV?

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Вы можете взглянуть на метод VideoCapture :: set и использовать CV_CAP_PROP_POS_MSEC для получения определенных кадров из видеофайла. Хотя я не тестировал этот код, он будет выглядеть примерно так:

cv::VideoCapture vc(video_file_name);
cv::Mat frame;

//How you will get the interval is up to you
float interval = getInterval();
float cur_interval = 0;

while(1)
{
   vc.set(CV_CAP_PROP_POS_MSEC, cur_interval);

   //The operator>> will return a NULL pointer if the next frame isn't valid
   if(vc >> frame)
     cv::imwrite("filename.jpg", frame);
   else
     break;

   cur_interval += interval;
}
0 голосов
/ 03 января 2012

Хотя OpenCV использует ffmpeg для чтения видео, вероятно, ffmpeg лучше подходит для описываемой вами задачи.

Вы можете получить сборку Zeranoe для Windows здесь (если вы работаете в Windows, если вы работаете в Linux, вы, вероятно, знаете, как получить к ней доступ). Если вы просто хотите использовать версию командной строки в Windows, получите статическую сборку, в противном случае - сборку разработки.

Здесь - учебное пособие Дрангера по началу программирования с использованием API ffmpeg.

Вы можете сделать это с помощью комбинации ffmpeg и Python, используя это руководство для извлечения всех кадров.

НТН!

...