阅读器线程中的Raspberry Pi python opencv视频捕获不返回帧

问题描述

我正在尝试将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 (将#修改为@)