简单的逐帧video解码器库

我正在寻找一个简单的c / c ++ lib,它允许将video的第一帧作为uchar数组提取。 并且有一个简单的function来访问下一个。

我知道FFMPEG,但它需要玩数据包和类似的东西,我很惊讶网上无处可以找到一个允许类似的东西:

videov = openVideo(“路径”); uchar * data = v.getFrame(); v.nextFrame();

我只需要提取video的帧以将其用作纹理……不需要重新编码后或任何东西……

当然,阅读最多格式的东西会很棒,例如建立在libavcodec上的东西; p

我正在使用Windows 7

谢谢!

这是OpenCV的一个例子:

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

它是未经测试的,但我从一些现有的工作代码中蚕食它,所以它不应该花很长时间才能使它工作。

cv::Mat_本质上是一个字节数组。 如果你真的需要一些显式类型为unsigned char * ,那么你可以使用适当大小的malloc空间并使用矩阵迭代

您可以使用像素位置( cv::Mat_::at() )或迭代器( cv::Mat_::begin()和friends)将cv::Mat转换为字节数组。

库很少将图像数据作为简单指针公开的原因有很多,例如:

  • 这意味着整个图像必须占据内存中的连续空间。 处理大图像时这是一个大问题
  • 它需要提交一定的数据排序(像素与非平面 – 是散布或单独存储的RGB平面?)并降低灵活性
  • 取消引用指针是导致错误(缓冲区溢出等)的原因。

因此,如果你想要你的指针,你必须为它做一些工作。

您可以使用OpenCV,它非常简单,并且在他们的网站上有一本有用的手册http://opencv.willowgarage.com/wiki/

使用DirectShow。 这是一篇文章: http : //www.codeproject.com/KB/audio-video/framegrabber.aspx有DirectShow’附加组件’来解码不同的video格式。 这里是您可以获取免费DirectShow过滤包以解码DirectShow不直接支持的一些常见格式的网站之一: http : //www.free-codecs.com/download/DirectShow_FilterPack.htm