简单的逐帧视频解码器库

Sir*_*ang 5 c c++ video codec

我正在寻找一个简单的 c/c++ 库,它允许将视频的第一帧提取为 uchar 数组。并有一个简单的功能来访问下一个。

我知道 FFMPEG,但它需要使用数据包和类似的东西,令我惊讶的是,在网上我找不到一个允许类似以下内容的库:

视频 v = openVideo("路径"); uchar* 数据 = v.getFrame(); v.nextFrame();

我只需要提取视频帧以将其用作纹理...之后不需要重新编码或任何其他操作...

当然,能够读取最多格式的东西会很棒,例如基于 libavcodec 构建的东西;p

我使用的是 Windows 7

谢谢!

mpe*_*kov 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;
}
Run Code Online (Sandbox Code Playgroud)

它未经测试,但我从一些现有的工作代码中拆解了它,所以不需要很长时间就能让它工作。

本质cv::Mat_<unsigned char>上是一个字节数组。如果您确实需要明确类型的东西unsigned char *,那么您可以使用适当大小的 malloc 空间并迭代矩阵

您可以cv::Mat使用像素位置(cv::Mat_::at())或迭代器(cv::Mat_::begin()

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

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

所以如果你想要你的指针,你必须做一些工作。