【笔记】OpenCV3 视频读写(二)

OpenCV 提供了 cv2.VideoCapture和VideoWriter来做视频的读写操作

 

先定义下要打开的视频文件,初始化个指定大小的窗口用来显示视频

import cv2

videoFilename = r"F:\我的文档\video\testvideo\road.MP4"
cv2.namedWindow('video',0)
cv2.resizeWindow('video',1024,768)
  • 读视频 VideoCapture

可以通过get方法获取视频的一些参数:帧率,宽高等等信息 

videoCapture = cv2.VideoCapture(videoFilename)
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourccode = videoCapture.get(cv2.CAP_PROP_FOURCC)
print("openstate:{}".format(videoCapture.isOpened()))
print("fps:{}, size:{}, fourcc:{}".format(fps, size, fourccode))

VideoCapture 构造函数如果传入文件名,则打开的视频文件,传入序号,则打开的是本机连接的摄像头,比如写0就可以打开电脑自带的视频设备

通过isOpened可以知道打开视频是否成功,当成功后,就可以通过read方法读取一帧一帧的数据

success, frame = videoCapture.read()

 

  • 写视频VideoWriter 

需要指定要写入的文件名,编码,帧速率,大小

videoWriter = cv2.VideoWriter('out/road.avi', cv2.VideoWriter_fourcc('M','P','4','2'),
                              fps,size)

# 未压缩的YUV,.avi格式:    cv2.VideoWriter_fourcc('I','4','2','0')
# MPEG-1编码类型,.avi格式: cv2.VideoWriter_fourcc('P','I','M','1')
# MPEG-4编码类型,.avi格式: cv2.VideoWriter_fourcc('X','V','I','D')
# MPEG-4.2编码类型,.avi格式: cv2.VideoWriter_fourcc('M','P','4','2')
# FLASH,.flv格式:         cv2.VideoWriter_fourcc('F','L','V','1')
# Ogg Vorbis,.ogv格式:    cv2.VideoWriter_fourcc('T','H','E','O')

我们这儿是要将读取的视频写入到另外一个视频文件,所以fps,size用从视频文件读取的值

调用write方法,讲一帧数据写入到视频文件中

videoWriter.write(frame)

 

写个循环,将读取到的视频帧全部写入到另外一个文件中去,同时也显示出来

success, frame = videoCapture.read()
while success:
    videoWriter.write(frame)
    success, frame = videoCapture.read()
    if success:
        cv2.imshow('video', frame)

    pressKey =  cv2.waitKey(1)
    if pressKey == 27:
        break

 

播放视频。。

 

本地文件夹中也有了新生成的文件,每次执行会覆盖

【笔记】OpenCV3 视频读写(二)_第1张图片

 

可以通过调整cv2.waitKey(1)的参数,来控制播放的速度。。

 

videoCapture = cv2.VideoCapture(videoFilename)

改为

videoCapture = cv2.VideoCapture(0)

笔记本买了后没打开过的摄像头开启了。。。。

 

【笔记】OpenCV3 视频读写(二)_第2张图片

还木有坏。。。。

【笔记】OpenCV3 视频读写(二)_第3张图片

 

 

完了,进行收尾工作。。

videoWriter.release()
videoCapture.release()
cv2.destroyAllWindows()

 

你可能感兴趣的:(学习笔记,OpenCV)