【问题标题】:How can i processing only 2 frame per second ?How can I exit while loop in c or c++?我怎样才能每秒只处理 2 帧?如何在 c 或 c++ 中退出 while 循环?
【发布时间】:2014-11-09 01:53:15
【问题描述】:

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

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();
}

}

【问题讨论】:

  • 请使用opencv的c++ api,不要使用过时的c。
  • 我需要你的帮助。请帮助我
  • 除非你改用 c++。
  • 我改成 c++ 请帮帮我。
  • 对于 2 fps,您需要等待 500 毫秒。但是 waitKey 仅在有一个 highgui 窗口时才有效(它正在等待该窗口中的按键)。如果你从不使用 namedWindow 或 imshow()(也许你有自己的 gui),waitKey() 将永远找不到任何东西。

标签: c++ c opencv visual-studio-2012 image-processing


【解决方案1】:

应该是类型转换问题,因为函数原型是int cvWaitKey(int) 尝试以下进入循环,然后按 ESC 退出程序。

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

【讨论】:

  • 嗨 eric。我使用了你建议的代码,但我无法停止 while 循环。
  • 我尝试了 cvWaitKey(0) 但我无法在循环中停止
  • 您是否在 cvWindow 中显示视频帧?
  • 我想从视频中捕获并处理这些帧,然后在另一个函数的窗口上显示结果,在这个函数中,我想从视频文件中抓取帧,直到我按下 Esc 键。然后我按下 Esc 键我在另一个函数中显示结果
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 2017-06-25
    • 2022-12-18
    • 2018-05-14
    • 2022-12-18
    • 2017-02-10
    • 2013-08-09
    • 2013-08-18
    相关资源
    最近更新 更多