2014-05-11 79 views
3

我正在嘗試使用此代碼進行實況攝像頭源的背景減法。但是這個代碼在兩個窗口中都給出了一個白色的圖像。問題是,當使用來自同一攝像頭的視頻文件進行測試時,它工作正常,沒有任何錯誤,但是當視頻文件被攝像頭饋送取代時,它變爲白色,並且在運行窗口終端中顯示錯誤:使用opencv mogdetector和C++從實時攝像頭源進行背景減法

HIGHGUI ERROR: V4L2: Unable to get property (1) - Invalid argument

從攝像頭拍攝視頻時,上述錯誤不斷重複。請幫忙解決這個問題。

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/video/background_segm.hpp> 
#include <cv.h> 
#include <iostream> 
#include <sstream> 

using namespace cv; 
using namespace std; 

Mat frame; //current frame 
Mat fgMaskMOG; //fg mask generated by MOG method 
Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method 
Ptr<BackgroundSubtractor> pMOG; //MOG Background subtractor 
Ptr<BackgroundSubtractor> pMOG2; //MOG2 Background subtractor 
int keyboard; 

int main() 
{ 
//create GUI windows 
namedWindow("Frame",0); 
//namedWindow("FG Mask MOG",0); 
namedWindow("FG Mask MOG 2",0); 
namedWindow("eroded",0); 
namedWindow("eroded2",0); 
//create Background Subtractor objects 

pMOG= new BackgroundSubtractorMOG(); //MOG approach 
pMOG2 = new BackgroundSubtractorMOG2(); //MOG2 approach 

//create the capture object 
VideoCapture capture(0); 

//read input data. ESC or 'q' for quitting 
while((char)keyboard != 'q' && (char)keyboard != 27) 
{ 
    //read the current frame 
    if(!capture.read(frame)) 
    { 
     cerr << "Unable to read next frame." << endl; 
     cerr << "Exiting..." << endl; 
     exit(EXIT_FAILURE); 
    } 
    //update the background model 
    //AND HERE!!! 
    //pMOG->operator()(frame, fgMaskMOG); 
    pMOG2->operator()(frame, fgMaskMOG2); 
    //get the frame number and write it on the current frame 
    stringstream ss; 
    rectangle(frame, cv::Point(10, 2), cv::Point(100,20), 
    cv::Scalar(255,255,255), -1); 
    ss << capture.get(CV_CAP_PROP_POS_FRAMES); 
    string frameNumberString = ss.str(); 
    putText(frame, frameNumberString.c_str(), cv::Point(15, 15), 
    FONT_HERSHEY_SIMPLEX, 0.5 , cv::Scalar(0,0,0)); 
    //show the current frame and the fg masks 
    imshow("Frame", frame); 


    imshow("FG Mask MOG", fgMaskMOG); 
    imshow("FG Mask MOG 2", fgMaskMOG2); 
    //get the input from the keyboard 
    keyboard = waitKey(30); 


} 

//delete capture object 
capture.release(); 

//destroy GUI windows 
distroyAllWindows(); 
return EXIT_SUCCESS; 
} 

回答

1

認爲樓市

CV_CAP_PROP_POS_FRAMES

不適用於相機。