我不确定这是否能解决你的问题。可以定义一个单独的函数,该函数从摄影机获取帧并将其放入队列中。您可以在单独的线程中运行此函数。有关线程的文档,请参阅此link。这会加快从摄影机获取帧的过程,因为上限读数()函数是一个阻塞函数(如果使用的是cap=cv2.VideoCapture())。在
代码应该是这样的。在def getf(queue):
cap = cv2.VideoCapture(0)
while(processing):
fr = {}
ret, a = cap.read()
if ret:
fr["imagecaptured"]=a
queue.put(fr)
else:
#whatever you want to do when a frame is unable to be read from cam
cap.release()
stream = threading.Thread(target=getf, args=queue)
注意,上面代码示例中的“processing”是一个全局变量。现在,您可以定义一个函数来将processing设置为true,并用'流式启动命令或直接将其放入程序中。在
一旦线程启动,帧就会被连续地放入队列中,以便您在需要时阅读。有了下面的代码,你就有了框架。在
^{pr2}$
我用这个方法从相机流下来,同时做一些其他的事情。引用自link关于用pyqt制作网络摄像头小部件的文章。请注意,上面的代码片段只是一个示例,并不是为了运行而读取的。除了定义之外,我建议您还包括一个条件来检查队列大小。现在您可以修改它以用于您的应用程序,并查看它是否起作用。您也可以参考这个link获取类似的示例。在