Python使用CV2库捕获、播放和保存摄像头视频

这篇具有很好参考价值的文章主要介绍了Python使用CV2库捕获、播放和保存摄像头视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python使用CV2库捕获和保存摄像头视频

关于cv2库的安装和使用基础可参见https://blog.csdn.net/cnds123/article/details/126547307

特别提示:CV2指的是OpenCV2(Open Source Computer Vision Library),安装的时候是 opencv_python,但在导入的时候采用 import cv2。

学习本文需要你的计算机有摄像头,笔记本一般内置有摄像头,若是台式机可以连接一个USB摄像头。

捕获视频帧

使用 OpenCV 可以捕获摄像头输出的视频流,并且可以对每一帧视频进行处理。下面是一个简单的示例代码,演示如何从摄像头中捕获视频帧并显示到屏幕上:

import cv2

#定义cv2.VideoCapture 类型的对象  
cap = cv2.VideoCapture(0)

#isOpened() 用来判断是否捕获到视频
if not cap.isOpened():
    print("无法打摄像机")
    exit()
  
while True:
    # 如果正确读取帧,ret为True,cap.read() 方法从摄像头中读取一帧视频
    ret, frame = cap.read()
    if not ret:
        break 

    # 显示帧视频
    cv2.imshow('frame', frame)
  
    # 按 'q' 键退出程序
    if cv2.waitKey(1) == ord('q'):
        break
  
# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

说明,VideoCapture 对象传入了参数 0,表示设备索引,设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接(就像我的情况一样)。所以我简单地传0。你可以通过传递1来选择第二个相机,以此类推。

运行效果如下:

Python使用CV2库捕获、播放和保存摄像头视频

捕获视频帧保存

把视频保存到本地,可以使用cv2.VideoWriter()方法,需要设置输出视频的文件名、编解码器、帧速率和帧大小等参数。VideoWriter() 有5个参数:

参数1:输出文件名,例如: d:/output.mp4。

参数2:FourCC 代码,FourCC 是用于指定视频编解码器的4字节代码。

参数3:帧率的数量。

参数4:帧大小。

参数5:颜色标志。如果为 True,正常颜色输出,否则就是灰色图像输出。

VideoWriter_fourcc()编码方法,常见的视频格式参数:

cv2.VideoWriter_fourcc('M', 'P', '4', 'V')

MPEG-4编码 .mp4 可指定结果视频的大小

cv2.VideoWriter_fourcc('X','2','6','4')

MPEG-4编码 .mp4 可指定结果视频的大小

cv2.VideoWriter_fourcc('I', '4', '2', '0')

该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件

cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')

该参数是MPEG-1编码类型,文件名后缀为.avi

cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')

该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小

cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')

该参数是Ogg Vorbis,文件名后缀为.ogv

cv2.VideoWriter_fourcc('F', 'L', 'V', '1')

该参数是Flash视频,文件名后缀为.flv

下面是一个简单的例子:

import cv2
  
# 打开摄像头
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("无法打摄像机")
    exit()
  
# 设置输出视频的参数
fourcc = cv2.VideoWriter_fourcc(*'MP4V')  # 其中*'MP4V'和 'M', 'P', '4', 'V'等效
out = cv2.VideoWriter('d:/output.mp4', fourcc, 20.0, (640, 480))
  
while True:
    # 读取视频帧
    ret, frame = cap.read()

    if not ret:
        break
   
    # 显示视频帧——播放视频
    cv2.imshow('frame',frame)
  
    # 将视频帧写入输出视频
    out.write(frame)
  
    # 按 'q' 键退出循环
    if cv2.waitKey(1) == ord('q'):
        break
  
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

运行后,将在你指定的路径产生找到生成的文件,我这里是d:/output.mp4。

最后,给出一个Python使用CV2库捕获摄像头视频,并使用tkinter做界面含有“抓拍”、“开始录制”、“停止录制”按钮的例子,

Python使用CV2库捕获、播放和保存摄像头视频

 源码如下:

import cv2
import tkinter as tk
from PIL import Image, ImageTk

# 创建主窗口
root = tk.Tk()
root.title("Camera App")

# 创建画布,用于显示视频帧
canvas = tk.Canvas(root, width=640, height=480)
canvas.pack()

# 创建按钮框架
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

# 拍照函数
def take_snapshot():
    ret, frame = cap.read()  # 读取当前帧
    if ret:
        cv2.imwrite("snapshot.jpg", frame)  # 保存为图片名称snapshot.jpg
        print("Snapshot taken!")

# 开始录像函数
def start_recording():
    global is_recording, out
    ret, frame = cap.read()  # 读取当前帧
    if ret:
        height, width, channels = frame.shape
        fourcc = cv2.VideoWriter_fourcc(*"XVID")
        out = cv2.VideoWriter("recording.avi", fourcc, 20.0, (width, height))  # 创建VideoWriter对象,视频名称recording.avi
        is_recording = True
        print("Recording started!")

# 停止录像函数
def stop_recording():
    global is_recording, out
    is_recording = False
    out.release()  # 释放VideoWriter对象
    print("Recording stopped!")

# 创建按钮
snapshot_btn = tk.Button(button_frame, text="抓拍", command=take_snapshot)
snapshot_btn.grid(row=0, column=0, padx=10)

start_btn = tk.Button(button_frame, text="开始录制", command=start_recording)
start_btn.grid(row=0, column=1, padx=10)

stop_btn = tk.Button(button_frame, text="停止录制", command=stop_recording)
stop_btn.grid(row=0, column=2, padx=10)

# 打开摄像头
cap = cv2.VideoCapture(0)
is_recording = False

# 更新视频帧函数
def update_frame():
    global is_recording
    ret, frame = cap.read()  # 读取当前帧
    if ret:
        if is_recording:
            out.write(frame)  # 写入视频帧
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 将BGR转换为RGB
        img = Image.fromarray(frame)  # 创建PIL图像对象
        img.thumbnail((640, 480))  # 缩放图像大小以适应画布
        img = ImageTk.PhotoImage(image=img)  # 创建Tkinter图像对象
        canvas.create_image(0, 0, anchor=tk.NW, image=img)  # 在画布上显示图像
        canvas.img = img  # 保留对图像的引用
    root.after(10, update_frame)  # 每10毫秒更新一次视频帧

# 启动视频帧更新
update_frame()

# 运行主循环
root.mainloop()

注意抓拍到的图片(名称snapshot.jpg)和录制视频(名称recording.avi)路径和源码在同一目录中,,下次抓拍到的图片和录制视频,会覆盖前面的,你可以改进之。文章来源地址https://www.toymoban.com/news/detail-439114.html

到了这里,关于Python使用CV2库捕获、播放和保存摄像头视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头)

    视频信号(以下简称为视频)是非常重要的视觉信息来源,它是视觉处理过程中经常要处理的一类信号。实际上,视频是由一系列图像构成的,这一系列图像被称为帧,帧是以固定的时间间隔从视频中获取的。获取(播放)帧的速度称为帧速率,其单位通常使用“帧/秒”表示

    2024年02月12日
    浏览(54)
  • 【深度学习】python使用opencv调用摄像头拍摄并保存图片

    打开pycharm,新建一个camerm.py文件,把下面代码复制粘贴进去就可以了。 需要安装两个库:pip install opencv-python;pip install numpy

    2024年02月11日
    浏览(42)
  • OpenCV基础知识(9)— 视频处理(读取并显示摄像头视频、播放视频文件、保存视频文件等)

    前言: Hello大家好,我是小哥谈。 OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像是以固定的时间间隔从视频中获取的。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要想处理视频,需要先对视频进行读

    2024年02月11日
    浏览(57)
  • (P4)Python plt显示和保存图像(cv2、Image)

    对这篇博客内容的最最简要的总结,便于快速抓要点 以下是一张图中包含多张小图 的三种不同写法的汇总和拆解。 汇总 ⭐ 写法一 写法二 写法三 已知的读取图片方式有两种:cv2、Image,初略讲解如下,有需要更多讲解的再单独整合。 写法一 cv2 参考资料 opencv 因为历史原因

    2024年01月24日
    浏览(70)
  • 播放海康摄像头直播流使用笔记

    tips:海康摄像机解绑https://sms.hikvision.com/dmBuC1

    2024年02月03日
    浏览(51)
  • OpenCV保存摄像头视频和视频文件操作实战(附Python源码)

    需要源码和视频请点赞关注收藏后评论区留言私信~~~ 在实际开发过程中,很多时候希望保存一段视频,为此,OpenCV提供了VideoWriter类,下面先熟悉一下里面的各种方法 VideoWriter类的常用方法包括它的构造方法,write方法和release方法 语法如下 VideoWriter object=cv2.VideoWriter(filename

    2024年02月07日
    浏览(65)
  • OpenCV中读取、显示、保存摄像头视频讲解与实战(附Python源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像以固定的时间间隔从视频中获取。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要处理视频,需要先对视频进

    2024年02月05日
    浏览(51)
  • 使用手机摄像头实现视频监控实时播放

    视频监控实时播放的原理与目前较为流行的直播是一致的,所以采用直播的架构实现视频监控实时播放,流程图如下: 目前实时视频流的传输协议有以下几种:RTSP、RTMP、HLS、Http-flv。 安卓APP开发使用HBuilder,而HBuilder内置了LivePusher直播推流控件,该控件使用了RTMP协议,所以

    2023年04月08日
    浏览(50)
  • opencv视频截取每一帧并保存为图片python代码CV2实现练习

    当涉及到视频处理时,Python中的OpenCV库提供了强大的功能,可以方便地从视频中截取每一帧并将其保存为图片。这是一个很有趣的练习,可以让你更深入地了解图像处理和多媒体操作。 使用OpenCV库,你可以轻松地读取视频文件,并在循环中逐帧读取视频的每一帧。随后,你可

    2024年02月12日
    浏览(55)
  • 使用pysimplegui+opencv编写一个摄像头的播放器

    使用pysimplegui和opencv实现一个播放器,播放 摄像头的画面。 效果: 打开摄像头: 从摄像头取帧: 将帧送到窗口播放: 由于使用PySimpleGUI的Image作为播放控件,所以每一帧都要转换成图片。除了png, 好像tif也可以,我没试。 从这里也可以看出来,pysimplegui播放的效率还是有点

    2024年01月23日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包