2017-02-21 15 views
0

Я использую приведенный ниже код, чтобы получить все кадры из видеофайла. Однако, когда я запускаю код для примера видео, double FramesCount - 1402402 и выдает сообщение об ошибке в кадре # 467.Как получить количество кадров видеофайла с помощью EmguCV?

P.S Я думаю, рассчитывать реальные кадры около ~ 467, так как видео файл только 15 секунд (15сек * 30fps = ~ 450 кадров)

_capture = new Capture(OpenFile.FileName); 
FramesCount = (int)_capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT); 

for(int i = 0; i < FramesCount - 1; i++) 
{ 
    FramesArray.Add(_capture.QueryGrayFrame().Resize(ImageWidth, ImageHeight, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR)); 
} 

Как я могу получить рассчитывать точные кадры?

ответ

1

Этот код:

int framecount = (int)Math.Floor(capt.GetCaptureProperty(CapProp.FrameCount)); //get count of frames 
double framerate = capt.GetCaptureProperty(CapProp.Fps); //get fps 

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

+0

В моем случае (OP) 'FramesCount' был очень высоким, но я все равно выполняю цикл, и я заполняю как можно больше' QueryGrayFrame' в 'FramesArray', и как только он выдает ошибку (без кадров больше, кроме цикла все еще происходит с тех пор, как FramesCount был выше фактических кадров), я просто игнорирую его и приступаю к использованию «FramesArray», который имеет все кадры видео. –

 Смежные вопросы

  • Нет связанных вопросов^_^