import cv2
class LoadUSBcam:
"""
读取摄像头数据
"""
INFO = ['fps', 'fw', 'fh', 'bs']
def __init__(self, pipe='0', **options):
frameWidth = options.pop('frameWidth', 1280)
frameHeight = options.pop('frameHeight', 720)
flip = options.pop('flip', False)
bufferSize = options.pop('bufferSize', 10)
self.infoDict = dict()
if pipe.isnumeric():
pipe = eval(pipe)
self.pipe = pipe
self.flip = flip
self.cap = cv2.VideoCapture(pipe)
self.cap.set(cv2.CAP_PROP_BUFFERSIZE, bufferSize)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, frameWidth)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, frameHeight)
self.fps = int(round(self.cap.get(cv2.CAP_PROP_FPS)))
self.processeDict()
def processeDict(self):
self.infoDict['fps'] = self.fps
self.infoDict['fw'] = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
self.infoDict['fh'] = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.infoDict['bs'] = self.cap.get(cv2.CAP_PROP_BUFFERSIZE)
def __iter__(self):
self.count = -1
return self
def __len__(self):
return 0
def __next__(self):
self.count += 1
if cv2.waitKey(1) == ord('q'):
self.cap.release()
cv2.destroyAllWindows()
raise StopIteration
# 读取视频帧
if self.pipe == 0:
ret_val, frame = self.cap.read()
if self.flip:
frame = cv2.flip(frame, 1)
else:
n = 0
while True:
n += 1
self.cap.grab()
if n % 30 == 0:
ret_val, frame = self.cap.retrieve()
if ret_val:
break
assert ret_val, f'Camera Error {self.pipe}'
return frame
def __getitem__(self, key):
return self.infoDict[key]
def getFrameSize(self):
size = (int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
return size
if __name__ == "__main__":
dataset = LoadUSBcam()
for frame in dataset:
cv2.imshow('f', frame)
cv2.waitKey()
使用类的迭代方法读取usb摄像头每一帧图像
猜你喜欢
转载自blog.csdn.net/athrunsunny/article/details/121650640
今日推荐
周排行