1.一些新的API
cv2.VideoCapture()
cap = cv.VideoCapture("vedio/lp.mp4")
VideoCapture是一个类,调用其构造函数创建一个视频截取器,只有一个参数,有两种类型,一种是字符串类型,代表视频的路径。一种是int类型,代表电脑上连接的摄像头的设备号。
创建这么一个对象cap之后,可以调用其read()函数来截取这一帧的图片。并指向下一帧等待下一次截取
videocapture.read()
read函数是VideoCapture类所创建的对象包含的函数,它有两个返回值,其中ret是一个bool类型的变量,表示是否成功获取这一帧的图片。frame是一个多维矩阵,代表的是这张图片。
videocapture.inOpened()
返回bool值,代表这个videocapture是否成功打开视频或者摄像头。由于videocapture没能成功打开视频或者调用摄像头的时候,python并不会报错,因此可以用这个api来查看。
2.完整代码:
import cv2 as cv
#创建并且resize窗口,用来显示视频
cv.namedWindow('video',cv.WINDOW_NORMAL)
cv.resizeWindow("video",640,480)
#如果是单纯的数字,就是调用电脑上连接的第几个摄像头
"""
cap = cv.VideoCapture(0)#cap相当于一个视频的图片截取器,需要一帧一帧的截取图片,然后放到cv2的窗口上去imshow它
"""
#如果是路径,就读取的是视频
cap = cv.VideoCapture("vedio/lp.mp4")
#如果没成功打开,不会报错,因此会用下面这个函数来检验是否成功打开
#循环截取每一帧数据
while cap.isOpened():
ret,frame = cap.read()#read会返回两个值,一个是bool类型,表示是否读取成功,另一个就是截取到的这张图片
if ret == False:
break
else:
cv.imshow('video',frame)
if cv.waitKey(33) == ord('q'):#如果键盘输入q,就退出循环,同时也实现了延时的功能,可以每隔33ms进入下一次循环,读取下一帧
#一般延迟多少毫秒根据所需要的视频帧率来设置
break;
#释放视频截取器
cap.release()
#销毁窗口
cv.destroyAllWindows()