目录
1.连接摄像头或读取视频文件
cap = cv2.VideoCapture(0)
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,
参数是视频文件路径,打开方式如下:
cap = cv2.VideoCapture(“../test.avi”)
2.按帧读取视频
ret,frame = cap.read()
cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。 其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
3.等待键盘输入
cv2.waitKey(1)
- waitKey()方法本身表示等待键盘输入,参数是1,表示延时1ms切换到下一帧图像。
- 对于视频而言;参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停;
- 参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。
- c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立
4.释放摄像头
调用release()释放摄像头, 调用destroyAllWindows()关闭所有图像窗口。
# 提取视频帧的操作,,,,,
def extract_framesROI(self, video_path, dst_folder, EXTRACT_FREQUENCY, index):
'''
'''
video = cv2.VideoCapture()
if not video.open(video_path):
print("can not open the video")
exit(1)
count = 1
while True:
_, frame = video.read()
# print(frame)
if frame is None:
break
row, col, _ = frame.shape
if count % EXTRACT_FREQUENCY == 0:
save_path = "{}/{}_{:>05d}.jpg".format(dst_folder, video_path.split('/')[-1][0:-4], index)
# 按照需求保存帧,也是设定的的大小进行保存,录制是按照摄像头的录制,保存只保存固定的大小的图像,
cv2.imwrite(save_path, frame[self.y1:self.y2, self.x1:self.x2])
cv2.destroyAllWindows()
index += 1
count += 1
video.release()
return index-1