前言
在计算机视觉领域,实时视频流的处理是一个常见且重要的任务。OpenCV 提供了强大的接口,允许我们轻松地从摄像头捕获视频流或读取视频文件进行处理。本文将详细介绍如何使用 OpenCV 读取和播放摄像头视频流以及本地视频文件。
完整代码
import cv2 as cv
def get_video_info(cap):
"""获取并打印视频的基本信息"""
frame_width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv.CAP_PROP_FPS)
frame_count = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
print(f"视频宽度:{frame_width}")
print(f"视频高度:{frame_height}")
print(f"帧率(FPS):{fps}")
print(f"总帧数:{frame_count}")
def camera_demo():
"""从摄像头捕获视频流并显示"""
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
return
get_video_info(cap)
while True:
ret, frame = cap.read()
if not ret:
print("无法读取摄像头帧")
break
cv.imshow("Camera Video", frame)
if cv.waitKey(1) == 27: # 按下 ESC 键退出
break
cap.release()
cv.destroyAllWindows()
def video_file_demo(video_path):
"""读取并播放本地视频文件"""
cap = cv.VideoCapture(video_path)
if not cap.isOpened():
print(f"无法打开视频文件:{video_path}")
return
get_video_info(cap)
while True:
ret, frame = cap.read()
if not ret:
print("视频播放结束或无法读取帧")
break
cv.imshow("Video Playback", frame)
if cv.waitKey(30) == 27: # 按下 ESC 键退出
break
cap.release()
cv.destroyAllWindows()
# 调用摄像头演示
camera_demo()
# 调用视频文件演示
# video_file_demo("path_to_your_video.mp4")
获取并打印视频的基本信息
def get_video_info(cap):
"""获取并打印视频的基本信息"""
frame_width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv.CAP_PROP_FPS)
frame_count = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
print(f"视频宽度:{frame_width}")
print(f"视频高度:{frame_height}")
print(f"帧率(FPS):{fps}")
print(f"总帧数:{frame_count}")
cap.get(cv.CAP_PROP_FRAME_WIDTH)
:获取视频帧的宽度。cap.get(cv.CAP_PROP_FRAME_HEIGHT)
:获取视频帧的高度。cap.get(cv.CAP_PROP_FPS)
:获取视频的帧率(每秒帧数)。cap.get(cv.CAP_PROP_FRAME_COUNT)
:获取视频的总帧数。
从摄像头捕获视频流并显示
def camera_demo():
"""从摄像头捕获视频流并显示"""
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
return
get_video_info(cap)
while True:
ret, frame = cap.read()
if not ret:
print("无法读取摄像头帧")
break
cv.imshow("Camera Video", frame)
if cv.waitKey(1) == 27: # 按下 ESC 键退出
break
cap.release()
cv.destroyAllWindows()
cv.VideoCapture(0)
:打开默认摄像头。参数0
表示第一个摄像头设备。cap.isOpened()
:检查摄像头是否成功打开。cap.read()
:读取一帧视频。返回值ret
表示读取是否成功,frame
是捕获的帧。cv.imshow()
:显示帧。cv.waitKey(1)
:等待键盘事件,参数1
表示等待 1 毫秒。返回值为按键的 ASCII 码。cap.release()
:释放摄像头资源。
读取并播放本地视频文件
def video_file_demo(video_path):
"""读取并播放本地视频文件"""
cap = cv.VideoCapture(video_path)
if not cap.isOpened():
print(f"无法打开视频文件:{video_path}")
return
get_video_info(cap)
while True:
ret, frame = cap.read()
if not ret:
print("视频播放结束或无法读取帧")
break
cv.imshow("Video Playback", frame)
if cv.waitKey(30) == 27: # 按下 ESC 键退出
break
cap.release()
cv.destroyAllWindows()
cv.VideoCapture(video_path)
:打开指定路径的视频文件。cap.isOpened()
:检查视频文件是否成功打开。cap.read()
:读取一帧视频
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容