OpenCV 将 FPS 设置为相机不工作
OpenCV set FPS to camera not working
我目前正在做实时人脸评估,并试图将我电脑的Camera的FPS设置为每秒1帧,然后每秒只调用一次级联函数。 (目前使用的是While(true)循环)这是我GPU的限制。
我尝试使用
设置相机的 FPS
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FPS, 1);
namedWindow("webcam",CV_WINDOW_AUTOSIZE);
但它不起作用。相机仍以相对较高的 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 帧,然后每秒调用一次级联函数。
编辑:我尝试使用
显示相机的 FPS
int FPS = cap.get(CV_CAP_PROP_FPS);
确实显示FPS目前为1,但似乎相机仍在以相对较高的帧率移动。
设置帧速率并不总是有效。有时相机根本不响应这种变化。但是,您可以采取一些巧妙的方式来解决您的问题。测量处理一帧所需的时间,然后从 1000 毫秒(1000 - Elapsce_Time)中减去它,并让它等待这个时间 cv::waitKey(1000-Elapsce_Time)
。最后,这不是一个很好的方法。您应该搜索相机的实际问题并尝试解决它。
我目前正在做实时人脸评估,并试图将我电脑的Camera的FPS设置为每秒1帧,然后每秒只调用一次级联函数。 (目前使用的是While(true)循环)这是我GPU的限制。
我尝试使用
设置相机的 FPSVideoCapture cap(0);
cap.set(CV_CAP_PROP_FPS, 1);
namedWindow("webcam",CV_WINDOW_AUTOSIZE);
但它不起作用。相机仍以相对较高的 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 帧,然后每秒调用一次级联函数。
编辑:我尝试使用
显示相机的 FPS int FPS = cap.get(CV_CAP_PROP_FPS);
确实显示FPS目前为1,但似乎相机仍在以相对较高的帧率移动。
设置帧速率并不总是有效。有时相机根本不响应这种变化。但是,您可以采取一些巧妙的方式来解决您的问题。测量处理一帧所需的时间,然后从 1000 毫秒(1000 - Elapsce_Time)中减去它,并让它等待这个时间 cv::waitKey(1000-Elapsce_Time)
。最后,这不是一个很好的方法。您应该搜索相机的实际问题并尝试解决它。