Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在OpenCV中保留VideoCapture提供的帧_Video_Opencv_Load - Fatal编程技术网

如何在OpenCV中保留VideoCapture提供的帧

如何在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);

我想使用opencv编写一个函数,读取视频文件,捕获单个帧并将其存储在std::vector>中。问题是在函数的末尾,我得到了向量向量中的图像,但当发布视频捕获时,所有数据都消失了

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());

解决办法和你说的不完全一样。但是你的建议帮助了我。