我正在实现一个对象检测算法,使用OpenCV从我的摄像头读取一个实时流,并且我有一个关于在这个过程中如何在内存中读取/存储帧的一般性问题。
代码的总体结构如下:
cap = cv2.VideoCapture(0)
while(True):
# Load frame from the camera
ret, frame = cap.read()
class_IDs, scores, bounding_boxes = neural_network(frame)
cv2.imshow('window', frame)
[...]
因此,基本上,代码一直在执行这个循环:
从webcam;
。
然而,分析的“下一个帧”并不是按照刚才处理的帧顺序排列的帧,而是当前从摄像机实时流中读取的帧。
另一方面,当从视频文件读取时,所有帧都是按顺序读取的,因此,我的程序的输出与视频的“正常”流之间的差距越来越大。
当我阅读一个文件时,我如何再现相机的行为?换句话说,在读取文件时,我想:
的视频帧。
我之所以问这个问题,是因为我必须在虚拟机上运行对象检测器,从远程摄像头读取视频文件,我担心如果我将视频流发送到虚拟机,它将被视为视频文件并进行顺序分析,而我希望减少对象检测和实时流之间的滞后。
发布于 2020-04-08 19:07:32
这是一个很好的问题,据我所相信,当您运行cap.read()
时,OpenCV会在这个例子中从缓冲区捕获帧并继续执行程序。
因此,一旦执行了管道,只有在执行cap.read()时才能捕捉到摄像机中的帧。
如果希望按时间顺序处理图像帧,则应尝试:
https://stackoverflow.com/questions/61106946
复制相似问题