2013-02-20 82 views
0

我使用ffmpeg支持構建opencv,這是我的代碼片段,用於讀取視頻並遍歷幀。爲什麼opencv可以打開視頻,但無法從中檢索幀?

if (argc != 3) { 
    std::cout<<"Usage: exe input_video_filename skip_frames \n"<<std::endl; 
    return 0; 
} 
char* video_fn = argv[1]; 
int skip_frames = atoi(argv[2]); 
VideoCapture cap; 
if(!cap.open(video_fn)) 
{ 
    std::cout<<"error reading video"<<video_fn<<std::endl; 
    return -1; 
} 
Mat frame,gray; 
int i = 0; 
double score = 0; 
vector<double> scores; 
while(true) 
{ 
    if(!**cap.retrieve(frame)**) 
    { 
     std::cout<<"error retrieve frame"<<std::endl; 
     break; 
    } 
    if(i%skip_frames) 
    { 
     cvtColor(frame,gray,CV_BGR2GRAY); 
     double sc = compute_cpbdm(gray); 
     std::cout<<sc<<std::endl; 
     scores.push_back(sc); 
    } 

} 

程序成功讀取在行cap.open(video_fn)的視頻,但不能在該行以檢索VideoCapture幀如果(!cap.retrieve(幀))。我嘗試過使用mp4和avi,但總是失敗。是否有人遇到過類似的問題?如何解決它?非常感謝!

回答

2

您正在使用capture.retrieve(frame),那麼在此之前應該有一個capture.grab()

或者,你可以這樣做:capture.read(frame),這不都在同一時間,

或只是capture >> frame;

+0

感謝凸顯代碼(同樣的事情讀) – berak 2013-02-20 11:15:32