import cv2
import Queue
import threading
import time
class PhotoTaker(object):
def __init__(self, cam_NO=0):
cap = cv2.VideoCapture(cam_NO)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
cap.set(cv2.CAP_PROP_FPS, 30)
self.cap = cap
self.photoQueue = Queue.Queue(maxsize=10)
self.th = threading.Thread(target=self._photo_worker)
self.th.setDaemon(True)
self.th.start()
def _photo_worker(self):
while True:
ret, frame = self.cap.read()
if ret:
self.image = frame
if self.photoQueue.full():
self.photoQueue.get()
self.photoQueue.put(frame,)
time.sleep(0.001)
def get_photo_detect(self):
return self.image
def get_photo(self):
return self.photoQueue.get()
在主进程中新建一个PhotoTaker实例i,新建一个线程A,A中调用i.get_photo(),会有阻塞的情况
网友评论