当你调用一个函数时,OpenCV可以生成线程。然而,在控制返回到调用线程之前,所有的工作都已完成。出于许多原因,异步处理会增加相当多的复杂性。(例如:程序如何知道计算何时完成?)如果程序不需要是异步的,它还会引入一些不必要的开销。
但是,你可以使用C++11线程API自己进行异步处理,只需付出最少量的努力。
OpenCV可以使用OpenMP来构建,以利用您计算机上可用的所有核心进行计算函数。它也可以使用OpenCL和CUDA来构建。此外,它还具有各种SIMD优化标志。
如果您不使用此类支持构建它,它将运行单线程。
在任一版本中,调用OpenCV函数会阻塞启动器线程,直到它计算出所有操作。即使将计算卸载到GPU上,这也是正确的。
OpenCV 的 parallel_for 操作创建多个线程来执行操作。它构建一个线程池并将工作分配给它。
线程的数量由 setNumThreads 函数决定。将其设置为零以进行串行工作。[这取决于 opencv 构建的线程库。对于某些线程库,它是 1]
注意:我曾经遇到过一些线程问题,当时我正在管理自己的线程池。