본문 바로가기
OpenCV

VideoCapture 최신프레임 가져오기

by YGspace 2021. 7. 6.
import queue, threading

class VideoCapture:
    
  def __init__(self, name):
    self.cap = cv2.VideoCapture(name)
    self.q = queue.Queue()
    self.ret = False
    t = threading.Thread(target=self._reader)
    t.daemon = True
    t.start()

  # read frames as soon as they are available, keeping only most recent one
  def _reader(self):
    while True:
      ret, frame = self.cap.read()
      self.ret = ret
      if not ret:
        break
      if not self.q.empty():
        try:
          self.q.get_nowait()   # discard previous (unprocessed) frame
        except queue.Empty:
          pass
      self.q.put(frame)

  def read(self):
    return self.ret,self.q.get()
    
ret, frame = self.video_capture.read()

댓글