我正在寻找一个简单的c / c ++ lib,它允许将视频的第一帧作为uchar数组提取。并且有一个简单的功能来访问下一个。
我知道FFMPEG,但它需要使用数据包和类似的东西,我很惊讶网上没有任何地方我可以找到一个允许类似的内容:
视频v = openVideo(“路径”); uchar * data = v.getFrame(); v.nextFrame();
我只需要提取视频的帧以将其用作纹理......不需要重新编码后或其他任何内容......
当然,阅读格式最多的东西会很棒,例如建立在libavcodec上的东西; p
我正在使用Windows 7
谢谢!
答案 0 :(得分: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 *
的内容,那么您可以使用适当大小的malloc空间并使用
您可以使用像素位置(cv::Mat
)或迭代器(cv::Mat_::at()
和朋友)将cv::Mat_::begin()
转换为字节数组。
图书馆很少将图像数据作为简单指针公开的原因有很多,例如:
所以如果你想要你的指针,你必须为它做一些工作。
答案 1 :(得分:1)
您可以使用OpenCV,它非常简单,并且在他们的网站上有一本有用的手册http://opencv.willowgarage.com/wiki/
答案 2 :(得分:0)
使用DirectShow。这是一篇文章:http://www.codeproject.com/KB/audio-video/framegrabber.aspx 有DirectShow'附加组件'来解码不同的视频格式。这是一个可以获取免费DirectShow过滤包以解码DirectShow不直接支持的常见格式的网站之一:http://www.free-codecs.com/download/DirectShow_FilterPack.htm