2013-07-18 99 views
0

我想讓視頻在循環播放。我想檢查它是否到達視頻的結尾,以便我可以重新實例化它;我如何讓它循環?如何判斷視頻是否在opencv中結束?

VideoStream::VideoStream(Filters* f, char* fileNam): 
      filter(f), 
      fileName(fileNam){ 
    TestON = true; 
    cap = new VideoCapture(fileNam); 
}; 


void VideoStream::readFrame(){ 
    if(!cap->isOpened()) // check if we succeeded 
    cerr<<"cannot open video file"; 
    if(cap->get(CV_CAP_PROP_POS_AVI_RATIO==1)){ 
      cap = new VideoCapture(fileName); 
    } 
    Mat image; 
    cap->read(image); 
    if(!image.empty()) 
     imshow("haha", image); 
    waitKey(1); 
    image.release(); 
}; 
+0

您使用'new'泄漏內存。考慮靜態分配一個'VideoCapture'實例。 – Aurelius

回答

1

顯然..在視頻的末尾有一個空框,您可以檢查一個這樣:

if(image.empty()){ 
    cap = new VideoCapture(fileName); 
}else{ 
    image.copyTo(*_stream); 
} 
4

VideoCapture::read()返回一個布爾值。如果false這意味着相機已斷開連接或視頻文件中沒有更多的幀。

相關問題