我们有一个应用程序,我们从外部系统获取消息,然后我们拍照,进行一些处理并将某些内容返回给外部系统。做一些性能测试,我发现了两个问题(它们有些相关)。我希望有人能够向我解释这一点。
1)是否_capture.QueryFrame()
缓冲帧?我们看到的是,如果来自网络摄像头的两帧查询之间存在间隙,则第二帧通常是较旧的图片,而不是调用 queryFrame 时的图片。
我们可以通过丢弃一些帧(即调用_capture.QueryFrame()
2-3 次并丢弃结果)在一定程度上缓解这个问题。
2)第二个问题是当我们对应用程序的不同部分进行计时时,我们发现清除缓冲区(调用QueryFrame()
2-3 次而不使用结果)大约需要 65 毫秒,然后这一行:Image<Bgr, Byte> source = _capture.QueryFrame()
大约需要 80 毫秒。这两个部分占用了最大的处理时间,我们的实际处理只需要大约 20-30 毫秒。
是否有更快的方法(a)清除缓冲区(b)以捕获帧?
如果您有使用 OpenCV 的经验并知道相关内容,请告诉我。