我在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循环 但这里的问题是它没有显示第十帧!确实它显示了最后一帧!
答案 0 :(得分:0)
img2 = frame;
将执行cv::Mat
的副本。但是,复制Mat
只会复制Mat
的标题,但这两个对象都会引用相同的数据。因此,如果您修改frame
的数据,则还要修改img2
。
您需要的是深层复制,即您不仅要复制标题,还要复制数据。这样做,修改frame
不会影响img2
。
您可以使用以下方式执行深层复制:
img2 = frame.clone();