如何在OpenCV中保留VideoCapture提供的帧
我想使用opencv编写一个函数,读取视频文件,捕获单个帧并将其存储在std::vector>中。问题是在函数的末尾,我得到了向量向量中的图像,但当发布视频捕获时,所有数据都消失了如何在OpenCV中保留VideoCapture提供的帧,video,opencv,load,Video,Opencv,Load,我想使用opencv编写一个函数,读取视频文件,捕获单个帧并将其存储在std::vector>中。问题是在函数的末尾,我得到了向量向量中的图像,但当发布视频捕获时,所有数据都消失了 vector<Mat>load_single_video(string path) { vector<Mat> one_video_vector; Mat video_img; VideoCapture Temp_video_capture(path);
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;
}
vectorload\u单个\u视频(字符串路径)
{
矢量1_视频_矢量;
Mat视频图像;
视频捕获临时视频捕获(路径);
临时视频捕获读取(视频图像);
而(!video_img.empty())
{
一个视频向量。推回(视频img);
临时视频捕获读取(视频图像);
}
Temp_video_capture.release();
返回一个视频向量;
}
来自:
注意:OpenCV 1.x函数cvRetrieveFrame
和cv.RetrieveFrame
返回
图像存储在视频捕获结构中。这是不允许的
要修改或发布图像!可以使用复制帧
cvCloneImage()
然后对副本执行任何操作
尽管我们使用的是新的OpenCV 2.x API,VideoCapture::read()
实际上是cvRetrieveFrame()
的包装器。正如笔记上说的,你必须复制一个相框
one_video_vector.push_back(video_img.clone());
解决办法和你说的不完全一样。但是你的建议帮助了我。