python - OpenCV-Python : How to get latest frame from the live video stream or skip old ones

标签 python opencv video-streaming video-processing ip-camera

我已经在 Python 中将 IP 摄像机与 OpenCV 集成在一起,以便从实时流中逐帧完成视频处理。我已将相机 FPS 配置为 1 秒,以便我可以在缓冲区中每秒处理 1 帧,但我的算法需要 4 秒来处理每一帧,导致缓冲区中未处理帧的停滞,随着时间的推移不断增长 &造成指数延迟。为了解决这个问题,我又创建了一个线程,我在其中调用 cv2.grab() API 来清理缓冲区,它在每次调用中将指针移向最新帧。在主线程中,我正在调用 retrieve() 方法,它为我提供了第一个线程抓取的最后一帧。通过这种设计,帧停滞问题得到解决并消除了指数延迟,但仍然无法消除 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

现在您要处理帧。

for frame in ReadCamera(Camera):
      .....

这工作得很好。除了打开和关闭相机会增加时间。

关于python - OpenCV-Python : How to get latest frame from the live video stream or skip old ones,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310718/

相关文章:

python - 字典键中的通配符

python - Python噪声库中的柏林噪声

ffmpeg - 如果 HTTP Live Stream 从开头开始,视频流播放过快

opencv - ubuntu14.04上的CMake错误

php - 多个视频上传时如何处理视频编码排队?

android - 在 Android Studio 中导入库 eneim/Toro

python - 混合多处理和串行端口

python - Keras 中的 SGD 优化不会垂直于水平曲线移动?

opencv - 使用图像处理的头发区域边界检测

c++ - 增加 SIFT 中检测到的特征数量会提高精度吗?