I\'m looking for a simple c/c++ lib that would allow to extract the first frame of a video as a uchar array. And have a simple fonction to access the next one.
I kno
Use DirectShow. Here's an article: http://www.codeproject.com/KB/audio-video/framegrabber.aspx There are DirectShow 'add-ons' to decode different video formats. Here's one of the sites where you can grab free DirectShow filter packs to decode some common formats that are not directly supported by DirectShow: http://www.free-codecs.com/download/DirectShow_FilterPack.htm
You can use OpenCV it is very simple and they have a useful manual on their site http://opencv.willowgarage.com/wiki/
Here's an example with 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;
}
It's untested, but I cannibalized it from some existing working code, so it shouldn't take you long to get it working.
The cv::Mat_<unsigned char>
is essentially a byte array. If you really need something that's explicitly of type unsigned char *
, then you can malloc space of the appropriate size and iterate over the matrix using
You can convert a cv::Mat
to a byte array using pixel positions(cv::Mat_::at()
) or iterators (cv::Mat_::begin()
and friends).
There are many reasons why libraries rarely expose image data as a simple pointer, such as:
So if you want your pointer, you have to do a bit of work for it.