Hem*_*sky 10 python opencv video-processing video-streaming ip-camera
我已经在Python中集成了一台带OpenCV的IP摄像头,以便从实时流中逐帧完成视频处理.我已经将相机FPS配置为1秒,这样我就可以在缓冲区中每秒获得1帧处理,但是我的算法需要4秒来处理每个帧,导致缓冲区中未处理帧的停滞,并且会随着时间的推移而不断增长导致指数延迟.为了解决这个问题,我创建了一个Thread,我在调用cv2.grab()API来清理缓冲区,它将指针移动到每个调用中的最新帧.在主线程中,我正在调用retrieve()方法,它给出了第一个Thread抓取的最后一帧.通过这种设计,帧停滞问题是固定的,并且指数延迟被消除,但仍然不能消除12-13秒的恒定延迟.我怀疑当cv2.retrieve()被调用时它没有获得最新的帧,而是来自最新帧的第4或第5帧.OpenCV中是否有任何API或任何其他设计模式来解决此问题,以便我可以获得最新的帧进行处理.
在此先感谢您的帮助.我真的很感激快速反应.
如果你不介意牺牲速度的话。你可以创建一个Python生成器来打开相机并返回帧。
def ReadCamera(Camera):
while True:
cap = cv2.VideoCapture(Camera)
(grabbed, frame) = cap.read()
if grabbed == True:
yield frame
Run Code Online (Sandbox Code Playgroud)
现在当你想要处理帧时。
for frame in ReadCamera(Camera):
.....
Run Code Online (Sandbox Code Playgroud)
这工作得很好。除了打开和关闭相机会累加时间。
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |