我想用opencv编写一个函数,它读取一个视频文件,抓取单个帧,并将它们存储在std::vector>中。问题发生在函数的末尾,我得到了向量向量的图像,但是当发布VideoCapture时,所有的数据都消失了。
vector<Mat>load_single_video(string path)
{
vector<Mat> one_video_vector;
Mat video_img;
VideoCapture Temp_video_capture(path);
Temp_video_capture.read(video_img);
while (!video_img.empty())
{
one_video_vector.push_back(video_img);
Temp_video_capture.read(video_img);
}
Temp_video_capture.release();
return one_video_vector;
}发布于 2013-01-14 16:05:42
来自OpenCV文档
注释: OpenCV 1.x函数
cvRetrieveFrame和cv.RetrieveFrame返回存储在视频捕获结构中的图像。不允许修改或释放图像!您可以使用cvCloneImage()复制框架,然后使用该副本做任何您想做的事情。
尽管我们使用的是新的OpenCV 2.xAPI,但VideoCapture::read()实际上是cvRetrieveFrame()的包装器。就像笔记上说的,你必须复制一个框架。
one_video_vector.push_back(video_img.clone());https://stackoverflow.com/questions/14321620
复制相似问题