代码如下。打开IP摄像头,获得局域网地址,使用VideoCapture
方法读取。
import cv2 as cv
url = 'http://admin:psw@ip/video' # 局域网地址
cap = cv.VideoCapture(url) # 获取视频流
cv.namedWindow("frame", 0) # 0为可调大小,注意:窗口名必须imshow里面的一窗口名一致
cv.resizeWindow("frame", 430, 270) # 设置长和宽
while cap.isOpened():
ret, frame = cap.read() # 逐帧读取 返回第一个参数表示是否返回读取成功 第二个表示读取的帧
if ret:
print("success capture")
# 调整窗口大小
cv.namedWindow("frame", 0) # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
cv.imshow('frame', frame) # 显示窗口
if cv.waitKey(1) & 0xFF == ord('q'): # 键盘输入q退出
break
cap.release() # 释放
cv.destroyAllWindows() # 关闭所有窗口
-
在64位计算机中,
cv.waitKey()
返回的是一个64位的整型数,在使用时需要将其与0xFF按位与运算,以获取低8位的结果。这是因为低8位表示键盘输入的ASCII码值,而高56位通常都是0,与其进行按位与运算后会忽略高位的数值,只保留低8位的值。如果不将返回值与0xFF进行按位与运算,则在某些情况下可能会导致程序无法正常退出或者产生其他异常。因此,建议在64位计算机上使用
cv.waitKey(0) & 0xFF
来获取键盘输入的ASCII码值。 -
在使用
cv2.VideoCapture
类读取视频流或者本地视频文件时,需要调用release()
方法释放资源。其主要作用是停止捕获视频帧,并且将视频流占用的内存等资源释放掉,以便其他应用程序能够访问它们。