欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 视频基础操作

视频基础操作

2025/2/14 5:09:31 来源:https://blog.csdn.net/MEABUG/article/details/145591467  浏览:    关键词:视频基础操作

1.1. 例子

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

import cv2try: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')):break# 释放 VideoCapture 和 VideoWriter 对象及所有窗口资源cap.release() out.release()cv2.destroyAllWindows() 
except IOError as e:print(f'IOError:{e}')
except Exception as e:print(f"Error: {e}")

1.2. 常见操作补充说明

1.2.1. 读取视频文件或摄像头

使用 cv2.VideoCapture() 可以读取视频文件或摄像头。

cv2.VideoCapture 是一个用于捕获视频的类,可以从视频文件、摄像头或网络视频流中读取视频帧。它的构造函数和方法支持多种参数和重载形式,以便灵活地处理不同的视频源。

  1. 默认构造函数
cap = cv2.VideoCapture()
    • 创建一个空的 VideoCapture 对象,通常用于后续调用 open() 方法打开视频源。
  1. 从视频文件或摄像头打开
cap = cv2.VideoCapture(filename, apiPreference=CAP_ANY)
    • filename:视频文件路径或摄像头索引(整数,如 0 表示默认摄像头)。
    • apiPreference:指定使用的后端 API(如 cv2.CAP_ANYcv2.CAP_FFMPEG 等)。默认值为 cv2.CAP_ANY,表示自动选择合适的后端。
  1. 从视频文件或摄像头打开(带参数)
cap = cv2.VideoCapture(filename, apiPreference, params)
    • params:一个参数列表,用于指定额外的配置(如分辨率、帧率等)。参数以 (paramId, paramValue) 的形式传递。

常用参数解释:

  • filename
    • 可以是视频文件路径(如 'video.mp4')。
    • 可以是摄像头索引(如 0)。
    • 可以是网络视频流的 URL(如 'http://192.168.1.100:8080/video')。
  • apiPreference
    • 指定使用的后端 API,例如:
      • cv2.CAP_ANY:自动选择后端。
      • cv2.CAP_FFMPEG:使用 FFmpeg 后端。
      • cv2.CAP_MSMF:使用 Microsoft Media Foundation 后端(Windows)。
      • cv2.CAP_V4L:使用 Video4Linux 后端(Linux)。
  • params
    • 一个参数列表,用于指定额外的配置。例如:
      • cv2.CAP_PROP_FRAME_WIDTH:设置帧宽度。
      • cv2.CAP_PROP_FRAME_HEIGHT:设置帧高度。
      • cv2.CAP_PROP_FPS:设置帧率。

# 读取视频文件 自动选择后端,且无其他设置
cap = cv2.VideoCapture("example.mp4")# 读取摄像头
# cap = cv2.VideoCapture(0)  # 默认摄像头(索引0)#检查视频是否正确读取
if not cap.isOpened():print("Video can't be opened")return

1.2.2. 获取视频属性

可以通过 cap.get() 获取视频的各种属性,例如宽度、高度、帧率等。

width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)  # 帧宽
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 帧高
fps = cap.get(cv2.CAP_PROP_FPS)  # 帧率
print(f"Width: {width}, Height: {height}, FPS: {fps}")

1.2.3. 逐帧读取视频

通过循环逐帧读取视频,并处理每一帧。

while cap.isOpened():ret, frame = cap.read()  # 读取一帧if not ret:break  # 视频结束## 显示当前帧cv2.imshow("Frame", frame)# 按下 'q' 键退出if cv2.waitKey(25) & 0xFF == ord('q'):breakcap.release()  # 释放视频流
cv2.destroyAllWindows()

1.2.4. 保存视频

使用 cv2.VideoWriter() 可以将处理后的视频保存为文件。

cv2.VideoWriter() 是 OpenCV 库中用于创建视频写入对象的函数,可以将一组图像帧保存为视频文件。

#函数参数介绍
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor])

参数介绍:

  • filename (str): 输出视频文件的路径。
  • fourcc (int): 指定编码器的四字符代码(FourCC)。
    • 例如:
    • - FFmpeg 使用:
        • cv2.VideoWriter_fourcc(*'mp4v')
        • cv2.VideoWriter_fourcc(*'XVID')
    • Windows 开发版 上编译的 OpenCV 使用
      • cv2.VideoWriter_fourcc(*'MJPG')
  • fps (float): 视频的帧率(每秒帧数)。
  • frameSize (tuple): 视频帧的尺寸(宽,高)。
  • isColor (bool, optional): 指示视频是否为彩色。默认为 True(彩色)。如果设置为 False,输出视频将为灰度。
# 设置视频编码器和帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 使用 XVID 编码器
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))  # 文件名、编码器、帧率、尺寸# 写入帧
while cap.isOpened():ret, frame = cap.read()if not ret:breakout.write(frame)  # 写入帧cv2.imshow("Frame", frame)if cv2.waitKey(25) & 0xFF == ord('q'):breakcap.release()
out.release()  # 关闭视频写入
cv2.destroyAllWindows()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com