2013-08-30 71 views
0
#include <iostream> 
#include<opencv2/highgui/highgui.hpp> 
#include<opencv2/core/core.hpp> 

using namespace std; 
using namespace cv; 

int main(int argc, const char* argv[]) { 

VideoCapture cap(0); 
if(!cap.isOpened()) 
     { 
      cout<<"can't open video file"<<endl; 
      return -1; 
     } 
namedWindow("Myvideo",CV_WINDOW_AUTOSIZE); 
while(1) 
{ 
    Mat frame; 
    bool bsuccess=cap.read(frame); 
    if(!bsuccess) 
    { 
     cout<<"can't read a frame"<<endl; 
     break; 
    } 
    imshow("Myvideo",frame); 
    if(waitKey(30)==27) 
    { 
     cout<<"Esc key is pressed by the user"<<endl; 
     break; 
    } 
} 
return 0; 
} 

上述代码仅用于从摄像头捕获视频。 但我想从这个视频中获得一张图片(即只有一帧)。有人可以告诉我如何做到这一点。我实际上试图删除while循环,这样我就可以得到一个循环,而不是一个接一个地循环(即视频)。并且还删除了“break”声明。如何从视频剪辑使用opencv和eclipse获取单帧

#include <iostream> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/core/core.hpp>` 

using namespace std; 
using namespace cv; 

int main(int argc, const char* argv[]) { 

VideoCapture cap(0); 
if(!cap.isOpened()) 
     { 
      cout<<"can't open video file"<<endl; 
      return -1; 
     } 
namedWindow("Myvideo",CV_WINDOW_AUTOSIZE); 

    Mat frame; 
    cap.read(frame); 
    imshow("Myvideo",frame); 
    if(waitKey(30)==27) 
    { 
     cout<<"Esc key is pressed by the user"<<endl; 

    } 

return 0; 
} 

但不幸的是,它只是显示一个空白窗口。 谁能帮我...在此先感谢

回答

0

首先readed帧通常是(总是?)黑色/灰色,试图显示下一帧 - 与此替换此代码

cap.read(frame); 
imshow("Myvideo",frame); 

cap.read(frame); 
cap.read(frame); 
imshow("Myvideo",frame); 
+0

@cyriel ...这真的是一个聪明的信息...它的工作......非常感谢。 – venus

相关问题