2015-11-25 39 views
3

我目前正在進行實時臉部評估,並試圖將我的計算機相機的FPS設置爲每秒1幀,然後每秒只調用一次級聯函數。 (目前使用While(true)循環)這是由於我的GPU的限制。OpenCV將FPS設置爲相機不工作

我曾嘗試用

VideoCapture cap(0); 
cap.set(CV_CAP_PROP_FPS, 1); 
namedWindow("webcam",CV_WINDOW_AUTOSIZE); 

設置相機的FPS,但它不工作。相機仍以相對較高的FPS進行處理。

對於級聯功能調用,我這樣做如下:

while (true){ 

     cap >> frame; 
     vector<Rect> faces; 
     face_cascade.detectMultiScale(frame, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30)); 

     // Draw circles on the detected faces 
     for(int i = 0; i < faces.size(); i++) 
     { 
      Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5); 
      cout<<"Face location: "<<faces[i].x<<","<<faces[i].x + faces[i].width<<","<<faces[i].y<<","<<faces[i].y + faces[i].height; 
      ellipse(frame, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0); 
     } 

     waitKey(30); 
     if (!frame.data){ 
      cerr << "Cannot acquire frame from the webcam " << endl; 
      break; 
     } 
     imshow("webcam", frame); 
    } 

我需要的相機去只有每秒1幀,然後通過調用函數級聯每秒一次。

編輯:我曾嘗試用

 int FPS = cap.get(CV_CAP_PROP_FPS); 

它確實表明,FPS目前處於1顯示相機的FPS,但似乎攝像機在一個相對較高的幀率還在動。

回答

0

設置幀速率並不總是奏效。有時相機根本不會對這種變化做出反應。但是,您可以通過一些棘手的方法來解決您的問題。測量處理幀所需的時間,然後將其從1000毫秒(1000 - Elapsce_Time)中減去,並等待此時間cv::waitKey(1000-Elapsce_Time)。最後,這不是一個很好的辦法。您應該使用相機搜索實際問題並嘗試解決。

+0

謝謝! WaitKey確實爲我工作!我已經嘗試了另一種方法,通過在循環中調用C++「Sleep」函數,但我相信這並不是很有效。我無法確定相機的問題(很可能是因爲我的電腦)。 – Piiinkyy

+0

cv :: waitKey必須工作。否則,你的代碼有問題或鏈接到OpenCV或其他我知道的東西。 –