python+OpenCV笔记(二十五):视频读写

目录

视频读取与显示

代码编写

视频保存

代码编写


视频读取与显示

在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:

1.创建读取视频的对象

cap = cv2.VideoCapture(filepath)

参数:filepath:视频文件路径

2.视频的属性信息

        2.1获取视频的某些属性

retval = cap.get(propId)

        参数:proId:从0到18的数字,每个数字表示视频的属性

        常用属性有:

索引 flags 意义
0 cv2.CAP_PROP_POS_MSEC 视频文件的当前位置(ms)
1 cv2.CAP_PROP_POS_FRAMES 从0开始索引帧,帧位置
2 cv2.CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(0表示开始,1表示结束)
3 cv2.CAP_PROP_FRAME_WIDTH 视频流的帧宽度
4 cv2.CAP_PROP_FRAME_HEIGHT 视频流的帧高度
5 cv2.CAP_PROP_FPS 帧率
6 cv2.CAP_PROP_FOURCC 编解码器四字符代码
7 cv2.CAP_PROP_FRAME_COUNT 视频文件的帧

        2.2修改视频的属性信息

cap.set(propId, value)

        参数:

  • proId:属性的索引,与上面的表格相对应
  • value:修改后的属性值

3.判断图像是否读取成功

isornot = cap.isOpened()
  • 读取成功返回True,否则返回False

4.获取视频的一帧图像

ret, frame = cap.read()

参数:

  • ret:若获取成功返回True,获取失败,返回False
  • frame:获取到的某一帧的图像

5.调用cv.imshow()显示图像,在显示图像时使用cv.waitkey()设置适当的持续时间,如果太低视频会播放的非常快,如果太高就会播放的非常慢,通常情况下我们设置25ms就可以了。

6.最后,调用cap.release()将视频释放掉

代码编写

import cv2 as cv

# 创建读取视频的对象
cap = cv.VideoCapture("E:\\114.mp4")

while (cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        cv.putText(frame, "FRAME_WIDTH:" + str(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
                   (0, 350), cv.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0))
        cv.putText(frame, "FRAME_HEIGHT:" + str(cap.get(cv.CAP_PROP_FRAME_HEIGHT)),
                   (0, 320), cv.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0))
        cv.putText(frame, "FPS:" + str(cap.get(cv.CAP_PROP_FPS)),
                   (0, 290), cv.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0))
        cv.putText(frame, "CURRENT_MESC:"+str(round(cap.get(cv.CAP_PROP_POS_MSEC)/1000, 2))+"s"
                   , (0, 260), cv.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0))
        cv.imshow("frame,", frame)
    if cv.waitKey(25) & 0xFF == ord("q"):
        break

cap.release()
cv.destroyAllWindows()


视频保存

在OpenCV中我们保存视频使用的是VedioWriter对象,在其中指定输出文件的名称,如下所示:

1.创建视频写入的对象

out = cv2.VideoWriter(filename, fourcc, fps, frameSize)

参数:

  1. filename:视频保存的位置
  2. fourcc:指定视频编解码器的4字节代码
    • 设置视频的编解码器,如下所示:
      retval = cv2.VideoWriter_fourcc(c1, c2, c3, c4)
    • 参数:

      c1,c2,c3,c4:是视频编解码器的4字节代码,在fourcc.org中找到可用代码列表,与平台紧密相关。
      常用的有:在Windows中: DIVX (.avi),I420(.avi),X264(.mp4),FLV1(.flv)
      在OS中:MJPG (.mp4) , DIVX (.avi), X264 (.mkv)
  3. fps:帧率
  4. frameSize:帧大小

代码编写

import cv2 as cv

# 读取视频
cap = cv.VideoCapture("E:\\114.mp4")

# 获取图像的属性(宽和高)
frame_width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))

# 创建视频写入的对象
out = cv.VideoWriter("E:\\113.avi", cv.VideoWriter_fourcc('D', 'I', 'V', 'X'), 10, (frame_width, frame_height))

while True:
    ret, frame = cap.read()
    if ret:
        out.write(frame)
    else:
        break

cap.release()
out.release()
cv.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/qq_45832961/article/details/122604421