我正在寻找一个简单的 c/c++ 库,它允许将视频的第一帧提取为 uchar 数组。并有一个简单的功能来访问下一个。
我知道 FFMPEG,但它需要使用数据包和类似的东西,令我惊讶的是,在网上我找不到一个允许类似以下内容的库:
视频 v = openVideo("路径"); uchar* 数据 = v.getFrame(); v.nextFrame();
我只需要提取视频帧以将其用作纹理...之后不需要重新编码或任何其他操作...
当然,能够读取最多格式的东西会很棒,例如基于 libavcodec 构建的东西;p
我使用的是 Windows 7
谢谢!
这是 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()。
库很少将图像数据公开为简单指针的原因有很多,例如:
所以如果你想要你的指针,你必须做一些工作。