9.视频读取存储
import numpy as np import cv2
1.摄像头读取数据
# 从摄像头获取图像数据 cap = cv2.VideoCapture(0) while(True): # ret 读取成功True或失败Falseq # frame读取到的图像的内容 # 读取一帧数据 ret,frame = cap.read() # 变为灰度图 gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) cv2.imshow('frame',gray) # waitKey功能是不断刷新图像,单位ms,返回值是当前键盘按键值 # ord返回对应的ASCII数值 if cv2.waitKey(1) & 0xff == ord('q'): break cap.release() cv2.destroyAllWindows()
2.参数解释
3.从视频文件读取
# 从文件读取视频内容 cap = cv2.VideoCapture('videos/cats.mp4') # 视频每秒传输帧数 fps = cap.get(cv2.CAP_PROP_FPS) # 视频图像的宽度 frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 视频图像的长度 frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) print(fps) print(frame_width) print(frame_height)
while(True): # ret 读取成功True或失败False # frame读取到的图像的内容 # 读取一帧数据 ret,frame = cap.read() if ret!=True: break cv2.imshow('frame',frame) # waitKey功能是不断刷新图像,单位ms,返回值是当前键盘按键值 # ord返回对应的ASCII数值 if cv2.waitKey(25) & 0xff == ord('q'): break cap.release() cv2.destroyAllWindows()
视频写入
在我们捕获视频,并对每一帧都进行加工之后我们想要保存这个视频。对于图片来时很简单只需要使用 cv2.imwrite()。但对于视频来说就要多做点工作。
这次我们要创建一个 VideoWriter 的对象。我们应该确定一个输出文件的名字。接下来指定 FourCC 编码(下面会介绍)。播放频率和帧的大小也都需要确定。最后一个是 isColor 标签。如果是 True,每一帧就是彩色图,否则就是灰度图。
FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表可以从fourcc.org查到。
• In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 gives very small size video)
# 从文件读取视频内容 cap = cv2.VideoCapture('videos/cats.mp4') # 视频每秒传输帧数 fps = cap.get(cv2.CAP_PROP_FPS) # 视频图像的宽度 frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 视频图像的长度 frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) print(fps) print(frame_width) print(frame_height)
fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('videos/output.avi',fourcc,fps,(frame_width,frame_height)) while(True): ret, frame = cap.read() if ret==True: # 水平翻转 frame = cv2.flip(frame,1) out.write(frame) cv2.imshow('frame',frame) if cv2.waitKey(25) & 0xff == ord('q'): break else: break out.release() cap.release() cv2.destroyAllWindows()