以下为本人在学习博主盼小辉OpenCV系列教程时的粗略笔记,供自己复习备忘使用。
目录
OpenCV-Python实战(2)——图像与视频文件的处理
2.创建与捕获对象相同参数的cv2.VideoWriter对象:
1.首先使用capture.set设置指定帧数,再使用capture,read进行读取:
一 读取相机画面对象:
capture = cv2.VideoCapture(index_camera)
其中index_camera = 0为默认摄像机,以此顺推。
二 读取视频对象:
capture = cv2.VideoCapture("video_path")
三 访问捕获对象的基本信息:
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = capture.get(cv2.CAP_PROP_FPS)
使用capture.get方法,其参数如下:
视频属性 | 解释 |
---|---|
CAP_PROP_POS_FRAMES | 视频文件的当前帧 |
CAP_PROP_POS_MSEC | 当前帧的时间戳 |
CAP_PROP_FPS | 获取 FPS |
CAP_PROP_FRAME_WODTH | 视频帧的宽度 |
CAP_PROP_FRAME_HEIGHT | 视频帧的高度 |
CAP_PROP_FRAME_COUNT | 视频文件的总帧数 |
四 写入视频文件的流程:
1.指定编码器:
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
或者:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
2.创建与捕获对象相同参数的cv2.VideoWriter对象:
out = cv2.VideoWriter("output_video_path", fourcc, int(fps), (int(frame_width), int(frame_height)), True)
最后一个参数值是 False 表示以灰度方式写入视频。如果我们想创建彩色视频,最后一个参数值为 True 。
3.最后在读取每一帧画面后使用out.write进行写入:
out.write(frame)
五 读取指定帧:
1.首先使用capture.set设置指定帧数,再使用capture,read进行读取:
capture.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
ret, frame = capture.read()
2.最后,不要忘记使用release方法释放所有资源:
capture.release()
out.release()
六 读取处理视频文件并保存的基本框架如下:
import cv2
import time
# 初始化摄像头
cap = cv2.VideoCapture(0) # 0 通常代表计算机的默认摄像头
if not cap.isOpened():
print('摄像头打开失败!')
# 获取摄像头捕获视频的属性(
cvframe2_.widthCAP =_ intPROP(_capFRAME._getHEIGHT())cv 2#. CAP帧_高度PROP
_fpsFRAME =_ intWIDTH())cap .#get (帧cv宽度2
.frameCAP__heightPROP =_ intFPS())cap .#get 帧率,但注意,对于实时摄像头,这个值可能不准确
# 打印视频属性
print(f"帧宽度: {frame_width}")
print(f"帧高度: {frame_height}")
print(f"帧率: {fps} (注意:这个值可能不准确,特别是对于实时摄像头)")
# 设置视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码格式
out = cv2.VideoWriter("output_gray.avi", fourcc, fps, (frame_width, frame_height), False) # 创建一个VideoWriter对象来保存视频
# 读取摄像头数据并处理
while cap.isOpened():
ret, frame = cap.read() # 从摄像头读取一帧
if ret:
start_time = time.time() # 记录开始处理的时间
cv2.imshow('Camera', frame) # 显示原始视频帧
# 将帧转换为灰度图 ,此处可以进行其他更复杂的处理流程
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 将灰度帧写入视频文件
out.write(gray_frame)
# 等待按键事件,并计算FPS
if cv2.waitKey(20) & 0xFF == ord('q'): # 如果按下'q'键,则退出循环
print('已退出!')
break
end_time = time.time() # 记录结束处理的时间
processing_time = end_time - start_time # 计算处理时间
fps_estimate = 1.0 / processing_time if processing_time > 0 else 0 # 估计FPS,注意这里并不准确,因为waitKey也占用了时间
print(f'估计FPS: {fps_estimate:.2f}') # 格式化输出估计的FPS
else:
break # 如果无法从摄像头读取帧,则退出循环
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
继续加油~