使用cv2.VideoCapture()从IP摄像机读取流

时间:2014-03-26 08:13:02

标签: python opencv

参考这个类似问题How to parse mjpeg http stream from ip camera?我可以使用requests从IP摄像头读取信息流:

stream = requests.get('http://<user>:<pass>@<addr>:<port>/videostream.cgi', stream=True)

bytez = ''
while True:
    bytez += stream.raw.read(16384)
    ...

并且效果很好,但我希望使用cv2.VideoCapture()来代替请求。

我尝试了以下方式的变体:

cap = cv2.VideoCapture()
cap.open('http://<user>:<pass>@<addr>:<port>/videostream.cgi?.mjpg')

while(True):
    ret, frame = cap.read()
    ...

但是无法得到任何东西,但关于空框架的例外情况。

如何使用cv2.VideoCapture()读取IP摄像机流?

3 个答案:

答案 0 :(得分:1)

我还没有尝试从VideoCapture访问IP摄像头,但是根据你的方法 cap = cv2.VideoCapture()视频捕获期望通常代表相机的数字0

将它留空,它不会访问任何摄像机,因此关于空帧的异常(即使稍后您声明cap.open(),openCV已经尝试打开摄像机并确定它是空的)

答案 1 :(得分:1)

将C:\ OpenCV \ 3rdparty \ ffmpeg \添加到Windows PATH环境变量或将opencv_ffmpeg.dll从该目录复制到C:\ Python27。这个问题已在OpenCV 2.4 VideoCapture not working on Windows

中得到解答

答案 2 :(得分:1)

将相机的位置传递到cap = cv2.VideoCapture()行:

cap = cv2.VideoCapture('http://<user>:<pass>@<addr>:<port>/videostream.cgi?.mjpg')