Opencv 视频输入在第一帧停止

Posted

技术标签:

【中文标题】Opencv 视频输入在第一帧停止【英文标题】:Opencv video feed stops on the first frame 【发布时间】:2016-04-13 11:37:48 【问题描述】:

我正在尝试使用 IP 网络摄像头和 opencv 通过我的 android 手机的摄像头获取视频。我正在使用 python 3.5(anaconda 发行版)和 opencv 3.1.0 这是代码:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
cap.open('http://192.168.1.4:8080/video')
while True:
    ret, frame = cap.read()
    cv2.imshow('RGB output', frame)
    if cv2.waitKey(0):
        break
cap.release()
cv2.destroyAllWindows()

问题是当我运行脚本时,我只能看到第一帧,而不是恒定的视频源。我搜索了很多,但找不到解决方案。救命!

【问题讨论】:

问题:如果你按任何键,你会打破。但是因为你有 waitKey (0) 你必须按一个键。所以换成某事。例如 if waitkey (0) == 'q' 仅在按下 q 时停止或更改为 if waitKey(10) 不等待按键但连续流式传输并且仅在按键时取消 我犯了一个多么愚蠢的错误!现在可以完美运行了,谢谢! 【参考方案1】:
import cv2
import numpy as np

cap = cv2.VideoCapture(0)
cap.open('http://192.168.1.4:8080/video')

while True:
    ret, frame = cap.read()
    cv2.imshow('RGB output', frame)
    key = cv2.waitKey(1):
    if key == ('c'):
            break

cap.release()
cv2.destroyAllWindows()

试试上面的代码就好了..

【讨论】:

欢迎来到 SO。请为此答案添加一些上下文并修复格式。 是的,但说明一般原则是有帮助的,在 OP 代码中,waitKey(0) 是无限等待或按一个键时等待。【参考方案2】:
cap=cv2.VideoCapture(0)
while True:
    success,frame=cap.read()  
    if(success):
        gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        cv2.imshow("Image",gray)
    
    
    if cv2.waitKey(1) & 0xFF==ord('z'):
        break
        
        
        
cap.release()        
cv2.destroyAllWindows()

cv2.waitKey(0) 是你必须将其设置为 1 的原因 如果你想从现有按钮关闭窗口离开你的代码因为它是,但没有 0 给 CPU 时间来处理,因为它是视频。

注意,您必须添加 & 0xFF 以避免在激活 NumLock 时出现其他问题。

更多在这里 What's 0xFF for in cv2.waitKey(1)?

以上代码是最佳实践

【讨论】:

以上是关于Opencv 视频输入在第一帧停止的主要内容,如果未能解决你的问题,请参考以下文章

OpenCv-C++ - 在视频中间停止工作

如何使用OpenCV获得实时视频输入的实时直方图?

opencv 怎样从MP4格式视频中读取一帧

Opencv 视频帧。我只能看到最后一帧

如何通过 OpenCV 和 Python 通过索引从视频中获取帧?

使用Python,OpenCV给原视频每一帧画面添加素描漫画版小窗口,并生成新视频