import cv2
if __name__ == "__main__":
video_name = "video.ts"
vc = cv2.VideoCapture(video_name) # 读入视频文件
video_len = int(vc.get(cv2.CAP_PROP_FRAME_COUNT)) # 视频总帧数
video_width = int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)) # 视频宽度
video_height = int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 视频高度
video_fps = int(vc.get(cv2.CAP_PROP_FPS)) # 视频帧率
print(video_len, video_width, video_height, video_fps)
if vc.isOpened(): # 判断是否正常打开
rval, frame = vc.read()
else:
rval = False
ind = 1
timeF = 1 # 视频帧计数间隔频率
while rval: # 循环读取视频帧
rval, frame = vc.read()
if (ind % timeF == 0): # 每隔timeF帧进行存储操作
cv2.imwrite('image/' + str(ind) + '.jpg', frame) # 存储为图像
# frame = cv2.resize(frame, (800, 800)) # 对图像进行resize
cv2.imshow("Image", frame)
ind = ind + 1
# print(ind)
cv2.waitKey(1)
vc.release()
上述代码是用来读取视频中数据,可以进行单帧图像显示与保存,其中使用 vc.get()
,将括号内的目标属性放入后就可以得到相应的结果,具体的属性可以参考下边表格。
视频属性 | 属性说明 |
---|---|
cv2.CAP_PROP_POS_MSEC | 视频文件的当前位置(ms) |
cv2.CAP_PROP_POS_FRAMES | 从0开始索引帧,帧位置。 |
cv2.CAP_PROP_POS_AVI_RATIO | 视频文件的相对位置(0表示开始,1表示结束) |
cv2.CAP_PROP_FRAME_WIDTH | 视频流的帧宽度。 |
cv2.CAP_PROP_FRAME_HEIGHT | 视频流的帧高度。 |
cv2.CAP_PROP_FPS | 帧率 |
cv2.CAP_PROP_FOURCC | 编解码器四字符代码 |
cv2.CAP_PROP_FRAME_COUNT | 视频文件的帧数 |
cv2.CAP_PROP_FORMAT | retrieve()返回的Mat对象的格式。 |
cv2.CAP_PROP_MODE | 后端专用的值,指示当前捕获模式 |
cv2.CAP_PROP_BRIGHTNESS | 图像的亮度,仅适用于支持的相机 |
cv2.CAP_PROP_CONTRAST | 图像对比度,仅适用于相机 |
cv2.CAP_PROP_SATURATION | 图像饱和度,仅适用于相机 |
cv2.CAP_PROP_HUE | 图像色调,仅适用于相机 |
cv2.CAP_PROP_GAIN | 图像增益,仅适用于支持的相机 |
cv2.CAP_PROP_EXPOSURE | 曝光,仅适用于支持的相机 |
cv2.CAP_PROP_CONVERT_RGB | 布尔标志,指示是否应将图像转换为RGB |