C++ 如何使用opencv在qt中播放视频时控制fps?

C++ 如何使用opencv在qt中播放视频时控制fps?,c++,qt,opencv,C++,Qt,Opencv,我尝试在qt小部件中使用opencv以特定的fps(例如30 fps)控制视频播放 有一个问题,我无法控制两个相邻帧之间的播放间隔。由于项目相当复杂,我只展示了几个代码来描述问题: while(buffer.get(frame)) { currentTime = cvGetTickCount(); waitTime = 1000/fps - (currentTime - lastTime)/msUnit; // I hope the thread waiting fo

我尝试在qt小部件中使用opencv以特定的fps(例如30 fps)控制视频播放

有一个问题,我无法控制两个相邻帧之间的播放间隔。由于项目相当复杂,我只展示了几个代码来描述问题:

while(buffer.get(frame))
{
    currentTime = cvGetTickCount();

    waitTime = 1000/fps - (currentTime - lastTime)/msUnit;

    // I hope the thread waiting for 'waitTime' here.

    // I have tried to use QTimer to to control the interval, but it's not
    // accurate at the ms level. Therefore, I tried to use
    // 'QSemaphore.tryAcquire(1, waitTime )', since I have set the 
    // resource to be 0, so 'tryAcquire()' always fails and waited for 
    // expected time. Most of time it worked good, but sometime it didn't, 
    // awaken in later time. 

   lastTime= cvGetTickCount();

   emit NextFrame(frame);
}
换句话说,我希望将时间间隔控制在毫秒级。在qt、opencv或其他方面有什么方法吗


提前谢谢

为什么不直接使用OpenCv的
waitKey()
。谢谢,-@Optimus1072,函数
waitKey()
只有在至少创建了一个HighGUI窗口且该窗口处于活动状态时才起作用。然而,opencv的gui支持一些功能,而我需要更复杂的功能。为什么需要以毫秒精度显示帧?@slawekwin大多数视频以25 fps或30 fps的速度播放,这意味着每帧需要持续1/25x1000=40ms或1/30x1000=33.3ms。我希望以不同的fps播放视频,也就是说,控制帧的播放精度至少为毫秒。您看过
sleep(ms)
功能吗?。