OpenCV视频基础操作

1.1. 例子

读取mp4格式的视频,将每一帧改为灰度图,并且打上水印(“WaterMark”),并将其输出保存为out.mp4,在这个例子中可以看到视频读取,每帧数据处理,视频保存的整体流程简单示例

import cv2

try:
    cap=cv2.VideoCapture("CatCloth.mp4")
    if not cap.isOpened():
        print("Video can't be opened")
        raise IOError
    
    # 获取视频的宽度、高度和帧率
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    delay=int(1000/(fps)) #计算每帧视频播放延时

    # 创建 VideoWriter 对象
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    output_path="OutPut.mp4"
    out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))

    while True:
        ret,frame=cap.read() #读取一帧数据
        if not ret:
            break
        #对每一帧图像进行处理
        # 转换为灰度图像
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 打上水印
        cv2.putText(gray_frame, "WaterMark", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)

        # 写入输出文件
        out.write(gray_frame)

        # 显示处理后的帧
        cv2.imshow("Processed Video", gray_frame)

        #此处延迟FPS计算出来的时间,按照视频原有速度播放视频 按q键退出
        if(cv2.waitKey(delay)&0xff==ord('q')):
            br