问题描述
我正在尝试将OpenCv视频捕获移至单独的线程,以提高性能并删除帧缓冲区。我的代码基于this post的解决方案。 问题是读取缓冲区没有结果,并且线程之间使用的qeue保持为空。这是我的代码:
import numpy as np
import time
import cv2
import queue
import threading
class VideoCapture:
def __init__(self,src = 0):
self.cap = cv2.VideoCapture(src)
self.q = queue.SimpleQueue()
t = threading.Thread(target=self._update)
t.daemon = True
t.start()
def _update(self):
while True:
ret,frame = self.cap.read()
if not ret:
break
if not self.q.empty():
try:
self.q.get_Nowait()
except queue.Empty:
pass
self.q.put(frame)
time.sleep(.01)
def read(self):
if self.q.empty:
return None
return self.q.get()
def release(self):
self.cap.release()
print("Go!")
cap = VideoCapture(0)
while True:
img = cap.read()
print(img)
#cv2.imshow('img',img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
它返回:
Go!
None
None
None
...
我的问题是:为什么它不起作用,以及如何使其起作用。
此外,相机工作正常。我很确定这个问题与线程相关。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)