用Python通过摄像头进行视频录制

如何使用python 打开摄像头 阅读详情
AI摘要

本文介绍了如何利用OpenCV-Python从摄像头捕获视频并保存到文件,包括VideoCapture和VideoWriter的使用,以及不同视频编码格式的选择。示例代码演示了实时显示并保存摄像头视频的过程。

☞ ░ 老猿Python博文目录:https://blog.youkuaiyun.com/LaoYuanPython ░

用Python通过摄像头进行视频录制

一、引言

要实现摄像头录播摄像信息,通过Python有很多种实现方式,老猿在此介绍的是OpenCV-Python的实现方式。

很多人都知道OpenCV是个图像处理软件,但其实OpenCV也是可以处理视频的,因为视频是一帧帧图像构成的,OpenCV通过VideoCapture类可以实现视频文件或摄像头信息读取,通过VideoWriter可以写入视频。

二、VideoCapture读取视频

VideoCapture既支持从视频文件(.avi , .mpg格式)读取,也支持直接从摄像机(比如电脑自带摄像头)中读取。VideoCapture是一个类,要想获取视频需要先创建一个VideoCapture对象,VideoCapture对象的创建方式有以下三种:

  • VideoCapture(deviceIndex,apiPreference = CAP_ANY):打开摄像头捕获视频。deviceIndex为摄像头序列号,打开缺省摄像头传0,apiPreference 为VideoCapture API后端标识符,老猿没有仔细研究,用缺省值即可
  • VideoCapture(filename,apiPreference = CAP_ANY):打开filename指定的视频文件
  • VideoCapture():创建一个对象,但没有确认捕获数据来源,需要通过VideoCapture其他方法来确认捕获数据来源

更多VideoCapture的内容请参考《opencv学习—VideoCapture 类基础知识》。

三、VideoWriter写入视频

VideoWriter是个视频写入类,用于将一帧帧图像写入视频文件中。VideoWriter共有五个构造方法,在本文重点推荐如下构造方法:

VideoWriter(filename, fourcc, fps,  frameSize, bool isColor = True)

相关参数分别为视频文件名、视频编码格式、帧率、视频帧大小、是否彩色。

视频编码格式参数fourcc相关取值及含义主要有如下:

CV_FOURCC('I','4','2','0') :未压缩的YUV编码,4:2:0色度子采样。这种编码广泛兼容,但会产生大文件。文件扩展名应为.avi
CV_FOURCC('P','I','M','1') :MPEG-1编码。文件扩展名应为.avi。
CV_FOURCC('X','V','I','D') :相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。文件扩展名应为.avi。
CV_FOURCC('M','P','4','V') :另一个相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。文件扩展名应为.mp4
CV_FOURCC('X','2','6','4'): 一种比较新的MPEG-4编码方式。如果你想限制结果视频的大小,这可能是最好的选择。文件扩展名应为.mp4
CV_FOURCC('F','L','V','1') :此选项为Flash视频。文件扩展名应为.flv

以上表达方式结合Python函数的分配参数功能,可以将4个字母用分配参数(调用函数传递实参时使用星号来传递多个参数,相关介绍请参考《python基础教程 https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html》的《 第5.3节 详说Python风格的函数分配参数 https://blog.youkuaiyun.com/LaoYuanPython/article/details/90670154》)的形参方式表示,如:CV_FOURCC('X','V','I','D')可以写成CV_FOURCC(*'XVID')

四、捕获摄像头输入写入视频文件的代码案例

下面的代码打开缺省摄像头捕获视频,并将捕获内容显示为窗口视频,并写入视频文件中保存,按q终止退出:

import cv2 

def captureVideoFromCamera():
    cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
    WIDTH = 1920
    HEIGHT = 1920
    FILENAME = r'f:\video\myvideo.avi'

    FPS = 24
    cap.set(cv2.CAP_PROP_FPS, 24)
    # 建议使用XVID编码,图像质量和文件大小比较都兼顾的方案
    fourcc = cv2.VideoWriter_fourcc(*'XVID')

    out = cv2.VideoWriter(FILENAME, fourcc=fourcc, fps=FPS,frameSize=(WIDTH,HEIGHT))

    if not cap.isOpened():
        print("Cannot open camera")
        exit()
    while True:
        # 逐帧捕获
        ret, frame = cap.read()
        # 如果正确读取帧,ret为True
        if not ret:
            print("Can't receive frame (stream end?). Exiting ...")
            break
        frame = cv2.flip(frame, 1)  # 水平翻转
        ret = out.write(frame)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示结果帧e
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) == ord('q'):  break
    # 完成所有操作后,释放捕获器
    out.release()
    cap.release()
    cv2.destroyAllWindows()

captureVideoFromCamera()

五、小结

本文介绍了使用OpenCV-Python操作视频的方案,介绍了视频读取和写入类的构造方法,并提供了一个读取摄像头视频写入视频文件的方法,有助于大家理解OpenCV-Python的视频操作相关方法。但需要强调的是,OpenCV是一个强大的计算机图像处理库,而不是视频流编码器或者解码器,它的长项不在于此,只是提供了这种能力而已,如果要针对多媒体文件做复杂的处理,推荐的还是 FFMEPG 或Moviepy库。

各位大神,你用程序实现过视频录播吗?有什么更简单的方法吗?另外说OpenCV这种方式生成的视频文件限制文件大小为2G,老猿没有验证过,不知是否有大神愿意指教。

写博不易,如果觉得本文还有点作用,大家能否帮忙集齐10个赞、10条评论?

更多图像处理的介绍请参考专栏《OpenCV-Python图形图像处理 https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html》和《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》相关文章。

如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。

老猿Python, 跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░
教你用Python控制摄像头录制视频~ 导语 ​Python如何下载网页上的图片呢? 哈喽哈喽铁汁萌~今天小编给大家分享另一个Python应用小程序,就是:用Python控制摄像头录制视频! 感兴趣的小伙伴耐心往下看哦👇👇✨,学会了你也可以做一个属于自己的摄像头控制程序! 那么如何用Python编程来实现呢?😳😳 下面,我一步步演示,希望大家能够受到启发! 用Python代码实现照片阅读器功能,主要有7步。 第一步:导入需要的依赖库。 这里面主要用到三个库: (1)tkinter库:用于界面制作 (2)PIL库 阅读详情

相关推荐

使用python实现电脑摄像头的视频录制

    最近我忽然有个想法,我是否可以用python实现使用我自己笔记本的摄像头监控家里的情况,每拍摄一个小时的视频自动保存为一个文件,或者可以把视频文件上传到云服务器。所以用行动尝试把想法编程实现。 有如下难点:      1. 使用python操作笔记本的摄像头      2. 控制摄像头拍摄视频,对视频流编码保存到本地磁盘      3. 连接云服务器,上传视频文件 一,使用pyt...

高山不高 7332

VideoCapture()的使用------python

VideoCapture()的使用------python

LYSSLQ2015的博客 3162

python同时录制屏幕、摄像头、声音合成视频把人像放在最终视频右下角

功能描述: 同时录制屏幕图像和摄像头采集到的内容以及麦克风声音,把所有内容合成为最终视频文件,保证屏幕画面、摄像头画面以及声音的同步,把摄像头采集的人像缩小以后放在最终视频的右下角。 技术要点: pillow进行屏幕截图 opencv根据屏幕截图生成视频 opencv采集摄像头视频 pyaudio录制麦克风声音 moviepy合成视频 使用事件进行多线程同步 参考代码: import wave import threading from os import remove,mkdir,listdir fr

爱我非你莫属的博客 1069

python videocature_Python常用模块之VideoCapture

功能介绍:VideoCapture是Win32版Python的一个扩展,可以访问视频采集设备(如USB摄像头)。它包含一个底层本地模块(vidcap.pyd)[1]和一个仅用Python编写的高层模块(VideoCapture.py)。还包括一些工具,可以用来定期上传摄像头拍摄的图像到网络服务器,监控并通过给定的URL保存图片到本地磁盘,等等。详细细节请参阅“Tools”目录下的“README.t...

weixin_29570795的博客 1300

Python opencv 使用 摄像头录制保存视频和保存截图 镜像变换

原文链接: Python opencv 使用 摄像头录制保存视频和保存截图 镜像变换 ...

阿豪 434

Python同时录制屏幕、摄像头、声音合成视频把人像放在最终视频右下角

封面图片:《Python程序设计实验指导书》(ISBN:9787302525790),董付国,清华大学出版社图书详情(京东):本书81个实验项目可与董付国老师的《Python程序设计(第...

Python小屋 1800

python调用摄像头录制视频_使用python编写一个录制屏幕及右下角录视频的工具

1.首先需要的python模块有:pyaudio、openCV、moviepy、pillow、wave主要第三方库。pyaudio录制音频openCV录制屏幕及对个人录像moviepy对录制的音频、录屏及录像文件同步合成。2.代码如下借鉴于网络,代码可直接运行:import waveimport threadingfrom os import remove, mkdir, listdirfrom ...

weixin_40009026的博客 961

使用Python打开网络摄像头并录制视频

在本教程中,我将向您展示如何使用Python编程语言打开您的网络摄像头并录制视频。我们将使用OpenCV库来访问摄像头,并使用OpenCV的VideoWriter类来保存视频文件。这将打开您的网络摄像头并开始录制视频。按下键盘上的’q’键将停止录制并退出程序。录制结束后,您将在当前目录下找到名为。首先,确保您已经安装了Python和OpenCV库。一旦安装完成,我们就可以开始编写代码了。要运行上述代码,请将其保存为一个Python文件(例如。使用Python打开网络摄像头并录制视频。

与其临渊羡鱼,不如退而结网 826

基于python opencv-python 的录制并保存USB摄像头视频(有声版)

1.前言: 在我的上一篇文章"基于python opencv-python 的录制并保存USB摄像头视频(无声版)"写了无声版的保存视频,总觉得缺少些什么,今天把有声版的也公布出来,供大家一起学习。 先说一下总思路,利用cv2生成视频文件,在利用其它库生成音频文件,最后将两个文件合并,这一操作将用到FFmpeg,就成了带音的视频。 缺点是:需要手动调整声音和视频同步。 2.环境搭建 (1)直接用:...

qq_43006346的博客 3298

Python实现视频录制,附完整源代码

接下来,我们需要创建VideoWriter对象,该对象用于将摄像头采集到的视频数据写入到文件中。在这段代码中,我们创建了一个名为out的VideoWriter对象,并将输出视频文件的格式设置为.avi,帧率设置为20FPS,分辨率设置为640x480。在这段代码中,我们创建了一个VideoCapture对象cap,将其与电脑的摄像头进行绑定,并且设置了视频分辨率为640x480。接下来,我们可以通过循环读取摄像头采集到的每一帧数据,并将其写入到VideoWriter对象中,最终生成一个完整的视频文件。

带你成为别人眼中的大佬! 1838

实测OV5640 DVP/MIPI接口720p@60fps配置,为什么我的Zynq-7020开发板只有30帧?

本文深入解析了OV5640摄像头在Zynq-7020开发板上帧率减半的问题,从寄存器配置到硬件链路进行全面排查。重点分析了DVP/MIPI接口的720p@60fps配置,提供了关键寄存器设置、时序参数调整及硬件带宽验证方法,帮助开发者快速定位并解决帧率下降问题。

weixin_42634811的博客 344

Python摄像头录制视频保存到本地

from os import mkdir from os.path import isdir import datetime from time import sleep from threading import Thread import cv2 def write(): while cap.isOpened(): ret, frame = cap.read() if ret: #写入视频文件 aviFile.write(fram

苦涩精灵的博客 2098

手把手教你用vivado2018.3为复旦微JFMQL15T打IP补丁(含环境变量配置技巧)

本文详细介绍了在Vivado 2018.3环境中为复旦微JFMQL15T开发板打IP补丁的全流程,包括环境变量配置、IP缓存管理等关键步骤。通过实战验证的解决方案,帮助工程师快速搭建开发环境,解决国产芯片开发中的常见问题,提升开发效率。

weixin_30374009的博客 725

opencv-python——调用摄像头录制并保存视频

调用摄像头录制并保存视频 import numpy as np import cv2 cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('output.avi',fourcc, 30.0, (640,480)) while(cap.isOpened()): ret, frame = cap.read() if ret==True: frame =

Irving.Gao的博客 7786

三. zemax光学设计流程+案例

文章目录zemax 基本操作:1. 建立光学基本模型2. 像质评价3. 优化(重点)4. 公差分析简单镜头设计 zemax 基本操作: 1. 建立光学基本模型 2. 像质评价 3. 优化(重点) 对系统设定的约束条件或目标值 统称为操作数。 操作数: 光学特性参数(焦距EFFL,近轴放大率PMAG,入瞳位置EMPP) 像差参数(球差SPHA,彗差COMA,像散ASTI) 边界条件(中心厚度值CTVA,边缘厚度值ETAV) 优化的主要步骤: 设置评价函数和优化操作数 一般小像差系统采用波像差 构建

Taiiiii的博客 8054

ChatGPT and Claude国内使用站点

这篇博客介绍了不同的AI聊天平台和定价信息,主要对比了ChatGPT和Claude两款产品。文章列出了多个提供聊天服务的AI平台,包括RawChat、ChatGPTPlus、ChatOpens、Wildcard和2233.ai等,并提供了每个平台的网页链接和定价详情。特别关注了Claude平台,介绍了其普通账号与会员账号的不同,以及相关的定价信息。此外,还提到了一些虚拟卡定价和服务细节,为用户选择合适的AI服务提供了多种参考。

nisidjndn的博客 1万+

OpenCV+python调用本地摄像头并录制视频

1、调用摄像头并录制视频 from cv2 import cv2 #捕获摄像头帧 cameraCapture = cv2.VideoCapture(0) fps = 30 size=(int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))) videoW...

jameschen9051的博客 2657

TIA protal与SCL从入门到精通(4)——软件单元使用

平台: TIA portal 15.1 1.添加软件单元 添加软件单元如下图: 关于软件单元使用基本限制,看如下文章即可 TIA protal与SCL从入门到精通(3)——软件单元基本介绍 每个软件单元是一个独立结构,所以每个软件单元的运行方式与实际PLC类似,所以首先添加主函数块: 注意:无论系统是否是具有并发性(这里不要混淆并行与并发的概念),在PLC所有主函数执行总是按主函数依次完成...

苦走一口田 7375

Python3使用opencv调用摄像头录制高清视频

安装依赖 pip3 install opencv-python 示例代码 import cv2 FILENAME = 'myvideo.avi' WIDTH = 1280 HEIGHT = 720 FPS = 24 # 必须指定CAP_DSHOW(Direct Show)参数初始化摄像头,否则无法使用更高分辨率 cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH) cap.set(cv2.CA

Dexter's Laboratory 4672

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 373

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

港科大livox_camera_calib虽然操作方便,但是使用mid360雷达会有视角问题(投影三维点到相机),尝试了很多场景,标定效果都不理想(推荐场景是楼梯间),看来港大的更适合avia之类窄角度的雷达。如果标定效果不好的话,就使用 getExt2节点,getExt1节点只优化外参,而getExt2节点在计算的时候会将一开始计算的内参作为初值和外参一起优化。一般使用getExt1节点即可,如果在外参初值验证过,并且异常值已经剔除后,优化还是有较大的残差,那么可以使用getExt2试一试。

z1872385的博客 2399

python 启动摄像头录制视频

录制视频 # coding:utf-8 import cv2 import sys import time reload(sys) sys.setdefaultencoding('utf8') time = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) cap = cv2.Video...

amku822202的博客 507

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python opencv录制视频_Python+OpenCV+pyQt5录制双目摄像头视频的实例

起因说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写一个。要是OpenCV+python。貌似很简单就能OK的事情,但是,我们的项目不是一般要展示给老师看嘛。谁愿意看一个没有界面的录制过程是吧~,最后会附上源代码~依赖的包在这里,我直接把import的包写出来了各位可以进行对号入座,然后就能知道需要安装哪个包啦!im...

weixin_39886024的博客 375

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

树莓派学习003--利用python+opencv对摄像头操作/实现摄像头实时预览/采集视频并录制/摄像头翻转/

树莓派学习003–利用python对摄像头操作 环境:python3、opencv4.5、Thonny 一、环境搭建 树莓派自带python,ctrl+alt+t(打开命令行)输入 python3 会返回python的版本,如果没有就要安装了 最好先更新一下 sudo apt-get install update 一般来说自己配置opencv非常麻烦,容易出错,所以可以选择已经配置好的系统 链接如下: 检测是否安装好了Opencv python3 import cv2 cv2.__version__

jun8086的博客 9978

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python调用摄像头录制视频_python+opencv打开摄像头,保存视频、拍照功能的实现方法...

以下代码是保存视频# coding:utf-8import cv2import sysreload(sys)sys.setdefaultencoding('utf8')cap = cv2.VideoCapture(0)cap.set(3,640)cap.set(4,480)cap.set(1, 10.0)#此处fourcc的在MAC上有效,如果视频保存为空,那么可以改一下这个参数试试, 也可以是-...

weixin_39746652的博客 803
上一篇: n行Python代码系列:两行代码实现彩色视频转换为灰度视频
下一篇: n行Python代码系列:两行代码调整视频播放速度
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 51
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值