2010-09-22 2 views
3

Я ищу простую библиотеку c/C++, которая позволит извлечь первый кадр видео как массив uchar. И иметь простой доступ для доступа к следующему.Простая фреймворческая библиотека декодера

Я знаю FFMPEG но requiere играть с пакетом и тому подобное, и я удивлен, что нигде в интернете я не могу найти LIB, которые позволяют что-то вроде:

видео V = openVideo (» дорожка"); uchar * data = v.getFrame(); v.nextFrame();

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

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

И я использую Windows 7

Спасибо!

+0

libavcodec является частью проекта ffmpeg. – crazyscot

ответ

3

Вот пример с OpenCV:

#include <cv.h> 
#include <highgui.h> 

int 
main(int argc, char **argv) 
{  
    cv::VideoCapture capture(argv[1]); 
    if (capture.grab()) 
    { 
     cv::Mat_<char> frame; 
     capture.retrieve(frame); 
     // 
     // Convert to your byte array here 
     // 
    }  
    return 0; 
} 

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

cv::Mat_<unsigned char> по существу представляет собой массив байтов. Если вы действительно нужно что-нибудь явно типа unsigned char *, то вы можете таНос пространство соответствующего размера и итерацию по матрице с помощью

Вы можете преобразовать cv::Mat в массив байтов с использованием позиции пикселя (cv::Mat_::at()) или итераторы (cv::Mat_::begin() и друзья).

Есть много причин, почему библиотеки редко выставляют данные изображения в качестве простого указателя, такие как:

  • Это подразумевает полное изображение должно занимать смежный пространство в памяти. Это большое дело при работе с большими изображениями
  • Требуется выполнить определенный заказ данных (пиксель против несплошного - это RGB-плоскости, сохраненные вкратце или отдельно?) И уменьшает гибкость
  • Указатели на разузнание являются причиной ошибок (переполнение буфера и т. д.).

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

0

Использование DirectShow. Вот статья: http://www.codeproject.com/KB/audio-video/framegrabber.aspx Есть дополнения для DirectShow для декодирования различных видеоформатов. Вот один из сайтов, где вы можете захватить бесплатные пакеты DirectShow фильтра для декодирования некоторых распространенных форматов, которые напрямую не поддерживается DirectShow: http://www.free-codecs.com/download/DirectShow_FilterPack.htm

+0

Я искал этот вопрос именно потому, что я ищу замену DirectShow. Это кросс-платформенный? Может ли он играть в странные форматы из коробки?О, нет? Я проверю сайт free-codecs.com, чтобы узнать, не могу ли я перестать получать «pSampleGrabber-> GetConnectedMediaType» ... Если это поможет, я могу даже отменить этот ответ. Потому что то, что мне нужно, не должно быть OpenCV. –

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