我正在使用Qt和OpenCV。我使用QtOpenGL Widgets并将opencv框架映射为glPlane上的纹理,这非常快且效果很好。
现在我想知道是否可以通过使用QThreads来提高性能。 QThread实现了映射和减少功能。因此,应该可以分割opencv帧并让多个线程处理帧。
作为示例:如果我的帧是640x480并且我有4个可用的线程,我会将帧拆分为640x120大小的帧并将其传递给每个线程。
线程没有共享数据,因为每个线程都有它自己的帧,最后我只需要附加4帧或将它们复制到一个新帧中。
我的问题是,您认为这会有效吗?它会给我带来处理能力,还是其他地方存在瓶颈?
答案 0 :(得分:1)
首先,我的直觉是说:“如果真的很快而且效果很好,就不要改变它!”
如果您只想玩线程,我建议您查看QtConcurrent。我对QThread与QtConcurrent的实现之间的性能差异一无所知,但我更喜欢使用QtConcurrent::run
而不是使用线程(我没有性能关键渲染代码)。
答案 1 :(得分:1)
首先,确保不为每个帧创建新线程 - 构造线程很昂贵。轻量级解决方案可以使用QtConcurrent::run()来创建N QFutures。在每个期货上使用QFuture::waitForFinished并收集结果。但是,我不相信QFutures是实时处理的正确解决方案。另一种方法是直接使用QThreadPool。同样,请确保不要每帧都创建池。