[英]Get frame video with opencv
这是我从视频中获取帧的代码。 我想在视频中显示带有循环和条件的2帧。
int main( int argc, char** argv )
{
string fileName = "E:\\Tugas Akhir\\Video Master\\city_1.avi";
Mat image1;
Mat image2;
Mat frame;
cv::Mat result;
VideoCapture cap(fileName);
if(!cap.isOpened())
return -1;
Mat edges;
for(int loop=0;;loop++)
{
//std::cout<<loop<<endl;
cap >> frame; // get a new frame from camera
if(loop>0 && (loop%20)==0){
//std::cout<<"frame 2"<<endl;
image2=frame;
**imshow("image2",image2);**
break;
}else if(loop==0){
image1=frame;
**imshow("image1",image1);**
//std::cout<<"frame 1"<<endl;
}
//loop++;
if(waitKey(30) >= 0) break;
}
waitKey(0);
return 0;
}
结果就是,2个带有2个不同图像的窗口
但是当我更改imshow(“ image1”,image1)方法位置时...
if(loop>0 && (loop%20)==0){
//std::cout<<"frame 2"<<endl;
image2=frame;
**imshow("image1",image1);**
**imshow("image2",image2);**
break;
}else if(loop==0){
image1=frame;
//std::cout<<"frame 1"<<endl;
}
image1窗口显示与image2相同的图片,
我不知道为什么会显示奇怪的结果,请告诉我如何解决,谢谢
这样的作业:
image1 = frame;
只做一个浅表副本。 Mat结构被复制,像素被共享
因此,在第二个示例中,您将使用当前帧覆盖image1。 如果要“缓存”垫子,请使用:
image1 = frame.clone(); // deep copy
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.