当我运行此代码并按下键盘上的Esc键时,我无法在循环时退出。 我在另一个程序中使用相同的代码(在main()函数中)并从while循环退出。 我不在main()函数中使用下面的代码。它是在main()中使用的函数调用。 我想停止处理从视频捕获和做其他工作,我不想完全关闭程序。我想只处理每秒2帧,我怎么能这样做? (当在opencv 2.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();
}
}
答案 0 :(得分:0)
它应该是类型转换问题,因为函数原型是int cvWaitKey(int)
在循环中尝试以下操作,然后按ESC退出程序。
char c = cvWaitKey(15);
if( c == 27 ) break;
答案 1 :(得分:0)
如果您需要精确的时间控制或帧速率控制,您可以计算时钟滴答。有关详细信息,请参阅here。 祝你好运,编码愉快。