使用cv2.VideoCapture()从IP摄像头读取流
提到一个类似的问题 如何从IP摄像头解析mjpeg http流? 我通过使用 requests
成功读取了IP摄像头的流:
stream = requests.get('http://<user>:<pass>@<addr>:<port>/videostream.cgi', stream=True)
bytez = ''
while True:
bytez += stream.raw.read(16384)
...
这个方法运行得非常好,但我想用 cv2.VideoCapture()
来实现,而不是使用requests。
我尝试了不同的方式,比如:
cap = cv2.VideoCapture()
cap.open('http://<user>:<pass>@<addr>:<port>/videostream.cgi?.mjpg')
while(True):
ret, frame = cap.read()
...
但是我什么都没得到,只是遇到了关于空帧的异常。
如何用 cv2.VideoCapture()
来读取IP摄像头的流呢?
3 个回答
0
我还没试过用VideoCapture来访问IP摄像头,不过在你的方法中,cap = cv2.VideoCapture()
这个视频捕捉是需要一个数字来表示摄像头,通常是0
。
如果你把这个数字留空,就不会连接到任何摄像头,所以会出现关于空帧的错误(即使你之后声明了cap.open()
,openCV已经尝试打开一个摄像头,并且发现是空的)。
3
在你的 cap = cv2.VideoCapture()
这一行中,传入摄像头的位置:
cap = cv2.VideoCapture('http://<user>:<pass>@<addr>:<port>/videostream.cgi?.mjpg')
2
把 C:\OpenCV\3rdparty\ffmpeg\ 这个路径添加到 Windows 的 PATH 环境变量里,或者把 opencv_ffmpeg.dll 这个文件从那个文件夹复制到 C:\Python27 里。这个问题在这里已经有人回答过了,链接是 OpenCV 2.4 VideoCapture 在 Windows 上无法使用