我怎么能每秒只处理2帧?在c或c++中循环时如何退出

How can i processing only 2 frame per second ?How can I exit while loop in c or c++?

本文关键字:循环 何退出 退出 c++ 怎么能 处理 2帧      更新时间:2023-10-16

当我运行此代码并按键盘上的Esc键时,我无法退出while循环。我在另一个程序中(在main()函数中)使用相同的代码,并退出while循环。我在main()函数中没有使用下面的代码。它是按函数调用的,它在main(()中使用过。我想停止处理视频捕获和其他工作,我不想完全关闭程序。我想每秒只处理2帧,我该怎么做?(在opencv2.4.6、windows7、vs2012中从视频或摄像头捕获帧时)请帮帮我。

void Demo::processVideo()
{
VideoCapture cap(this->videofile.c_str());
cout<<"Loading classifier...."<<endl;
MultiTrain mt;
mt.loadModel(("f:dataset/eye_svm_model.xml"));
int fps=(int) cap.get(CV_CAP_PROP_FPS);
if(!cap.isOpened())
{
cout<<"problems with avi file"<<endl;
}
else
{
cout<<"Processing video...."<<endl;
Mat frame;
int k = 0,key1=0;
while(1)
{
//char c = WaitKey(15);
// if( c == 27 ) break;
cap>>frame;
int res = (int)mt.getPrediction(frame);
cout<<"Prediction for frame #"<<k<<" => "<<res<<endl;
this->predictions.push_back(res);
k++;
}
cap.release();
}
}

这应该是一个类型转换问题,因为函数原型是int cvWaitKey(int)在循环中尝试以下操作,然后按ESC键退出程序。

char c = cvWaitKey(15);
if( c == 27 ) break;

如果您想要精确的时间控制或帧速率控制,您可以计算时钟信号。有关示例的详细信息,请参见此处。祝你好运,编码快乐。