笑话网站域名,淘客软件自动做网站?,网站开发概要设计,网站 备案 注销 影响OpenCV视频处理基础 OpenCV的视频教学#xff1a;https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中#xff0c;cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频#xff0c;或者从视频文件中读取帧。以下是如何使用…OpenCV视频处理基础 OpenCV的视频教学https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频或者从视频文件中读取帧。以下是如何使用 cv2.VideoCapture() 实现视频捕获、设置捕获属性以及释放捕获对象的详细步骤。
1. 使用 cv2.VideoCapture() 捕获摄像头
import cv2# 打开默认摄像头通常是0
cap cv2.VideoCapture(0)if not cap.isOpened():print(无法打开摄像头)exit()while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(无法获取帧)break# 显示帧cv2.imshow(Camera Feed, frame)# 按下 q 键退出循环if cv2.waitKey(1) 0xFF ord(q):break# 释放捕获对象并关闭所有窗口
cap.release()
cv2.destroyAllWindows()2. 使用 cv2.VideoCapture() 捕获视频文件
import cv2# 打开视频文件
cap cv2.VideoCapture(video.mp4)if not cap.isOpened():print(无法打开视频文件)exit()while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(视频结束或无法读取帧)break# 显示帧cv2.imshow(Video Playback, frame)# 按下 q 键退出循环if cv2.waitKey(30) 0xFF ord(q):break# 释放捕获对象并关闭所有窗口
cap.release()
cv2.destroyAllWindows()3. 设置视频捕获属性
OpenCV 允许你通过 cap.set() 方法来设置视频捕获的属性。常见的属性包括帧宽、帧高、帧率等。
import cv2# 打开默认摄像头
cap cv2.VideoCapture(0)if not cap.isOpened():print(无法打开摄像头)exit()# 设置帧宽和帧高
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)# 设置帧率每秒帧数
cap.set(cv2.CAP_PROP_FPS, 30)while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(无法获取帧)break# 显示帧cv2.imshow(Camera Feed, frame)# 按下 q 键退出循环if cv2.waitKey(1) 0xFF ord(q):break# 释放捕获对象并关闭所有窗口
cap.release()
cv2.destroyAllWindows()4. 释放视频捕获对象
无论你是从摄像头还是视频文件捕获视频在完成视频处理后都应该释放 cv2.VideoCapture() 对象并关闭所有打开的窗口。
cap.release()
cv2.destroyAllWindows()总结
cv2.VideoCapture(0) 用于捕获摄像头视频。cv2.VideoCapture(file.mp4) 用于捕获视频文件。cap.set(propId, value) 用于设置视频捕获属性。cap.release() 用于释放视频捕获对象。cv2.destroyAllWindows() 用于关闭所有 OpenCV 窗口。
通过这些步骤你可以在 OpenCV 中实现视频捕获、设置属性以及释放资源。 2-OpenCV视频写入 在 OpenCV 中cv2.VideoWriter() 是一个用于将视频帧写入视频文件的类。你可以使用 cv2.VideoWriter() 将捕获到的帧写入到视频文件中。以下是如何使用 cv2.VideoWriter() 实现视频写入、设置写入参数、逐帧写入以及释放写入对象的详细步骤。
1. 使用 cv2.VideoWriter() 写入视频
首先你需要创建一个 cv2.VideoWriter() 对象并指定视频文件的输出路径、编解码器、帧率和帧大小。
import cv2# 打开默认摄像头
cap cv2.VideoCapture(0)if not cap.isOpened():print(无法打开摄像头)exit()# 获取帧的宽度和高度
frame_width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 定义输出视频文件的参数
out cv2.VideoWriter(output.avi, cv2.VideoWriter_fourcc(M, J, P, G), 30, (frame_width, frame_height))while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(无法获取帧)break# 写入帧到视频文件out.write(frame)# 显示帧cv2.imshow(Camera Feed, frame)# 按下 q 键退出循环if cv2.waitKey(1) 0xFF ord(q):break# 释放捕获对象和写入对象并关闭所有窗口
cap.release()
out.release()
cv2.destroyAllWindows()2. 设置视频写入参数
在创建 cv2.VideoWriter() 对象时你需要设置以下参数
文件名输出视频文件的路径。FourCC编解码器这是一个 4 字节的代码表示视频编解码器。常用的编解码器包括 cv2.VideoWriter_fourcc(M,J,P,G) 或 cv2.VideoWriter_fourcc(*MJPG) 表示 Motion JPEG。cv2.VideoWriter_fourcc(X,V,I,D) 或 cv2.VideoWriter_fourcc(*XVID) 表示 XVID。 帧率每秒帧数FPS通常设置为 30 或 25。帧大小视频的宽度和高度。
# 定义输出视频文件的参数
out cv2.VideoWriter(output.avi, cv2.VideoWriter_fourcc(M, J, P, G), 30, (frame_width, frame_height))3. 逐帧写入视频
在读取每一帧后你可以使用 out.write(frame) 将帧写入视频文件。
while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(无法获取帧)break# 写入帧到视频文件out.write(frame)# 显示帧cv2.imshow(Camera Feed, frame)# 按下 q 键退出循环if cv2.waitKey(1) 0xFF ord(q):break4. 释放视频写入对象
在完成视频写入后你应该释放 cv2.VideoCapture() 和 cv2.VideoWriter() 对象并关闭所有打开的窗口。
# 释放捕获对象和写入对象并关闭所有窗口
cap.release()
out.release()
cv2.destroyAllWindows()总结
cv2.VideoWriter(output.avi, cv2.VideoWriter_fourcc(M, J, P, G), 30, (frame_width, frame_height)) 用于创建视频写入对象。out.write(frame) 用于逐帧写入视频。out.release() 用于释放视频写入对象。cap.release() 用于释放视频捕获对象。cv2.destroyAllWindows() 用于关闭所有 OpenCV 窗口。
通过这些步骤你可以在 OpenCV 中实现视频写入、设置参数、逐帧写入以及释放资源。 3-OpenCV视频帧处理 在 OpenCV 中你可以逐帧读取视频帧对这些帧进行处理显示处理后的帧并将处理后的帧保存到视频文件中。以下是如何实现这些功能的详细步骤。
1. 逐帧读取视频帧
使用 cv2.VideoCapture() 对象的 read() 方法逐帧读取视频帧。
import cv2# 打开视频文件或摄像头
cap cv2.VideoCapture(video.mp4) # 或者 cap cv2.VideoCapture(0) 为摄像头if not cap.isOpened():print(无法打开视频文件或摄像头)exit()while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(无法获取帧或视频结束)break# 对帧进行处理processed_frame process_frame(frame)# 显示处理后的帧cv2.imshow(Processed Frame, processed_frame)# 按下 q 键退出循环if cv2.waitKey(30) 0xFF ord(q):break# 释放捕获对象并关闭所有窗口
cap.release()
cv2.destroyAllWindows()2. 处理视频帧
你可以对视频帧进行各种处理例如滤波、增强、特征提取等。以下是一个简单的例子对帧进行灰度处理。
def process_frame(frame):# 将帧转换为灰度gray_frame cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)return gray_frame3. 显示视频帧
使用 cv2.imshow() 函数显示处理后的帧。
cv2.imshow(Processed Frame, processed_frame)4. 保存处理后的视频帧
将处理后的帧写入一个新的视频文件。你需要创建一个 cv2.VideoWriter() 对象来实现这一点。
import cv2# 打开视频文件或摄像头
cap cv2.VideoCapture(video.mp4) # 或者 cap cv2.VideoCapture(0) 为摄像头if not cap.isOpened():print(无法打开视频文件或摄像头)exit()# 获取原始帧的宽度和高度
frame_width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建 VideoWriter 对象
out cv2.VideoWriter(output.mp4, cv2.VideoWriter_fourcc(*mp4v), 30, (frame_width, frame_height))while True:# 读取一帧ret, frame cap.read()# 检查是否成功读取帧if not ret:print(无法获取帧或视频结束)break# 对帧进行处理processed_frame process_frame(frame)# 显示处理后的帧cv2.imshow(Processed Frame, processed_frame)# 将处理后的帧写入视频文件out.write(processed_frame)# 按下 q 键退出循环if cv2.waitKey(30) 0xFF ord(q):break# 释放捕获对象和写入对象并关闭所有窗口
cap.release()
out.release()
cv2.destroyAllWindows()总结
使用 cv2.VideoCapture() 逐帧读取视频帧。对每一帧进行处理例如转换为灰度、应用滤波器等。使用 cv2.imshow() 显示处理后的帧。使用 cv2.VideoWriter() 将处理后的帧写入新的视频文件。
通过这些步骤你可以在 OpenCV 中实现视频帧的逐帧读取、处理、显示和保存。