在opencv c ++中从相机中抓取并保存特定帧

时间:2016-04-18 09:39:31

标签: c++ opencv image-processing

我在opencv中使用c ++编程 我想从帧序列中保存特定帧,但只保存最后一帧! 让我介绍一下 我有以下代码:

   Mat frame,img1,img2;
   for(int i = 0; i < 100; i++)
        {
            cout<<i<<endl;
            waitKey(1);
            video >> frame;

            if (i==10)
                {
                    img2=frame;

                }
            namedWindow("img");
            imshow("img",frame);
        }

namedWindow("pic");
imshow("pic",img2);
waitKey(30);
video.release();
waitKey(0);  

你可以看到100帧被抓住了,我想在img2中保存第10帧并在循环结束时将其显示出for循环 但这里的问题是它没有显示第十帧!确实它显示了最后一帧!

1 个答案:

答案 0 :(得分:0)

img2 = frame;将执行cv::Mat的副本。但是,复制Mat只会复制Mat的标题,但这两个对象都会引用相同的数据。因此,如果您修改frame的数据,则还要修改img2

您需要的是深层复制,即您不仅要复制标题,还要复制数据。这样做,修改frame不会影响img2

您可以使用以下方式执行深层复制:

img2 = frame.clone();