参考这个类似问题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摄像机流?
答案 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')