首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 14:05
  • 2108
  • 13366
blog.csdn.net

☞ ░ 老猿Python博文目录:https://blog.csdn.net/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)
  • 1

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

视频编码格式参数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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上表达方式结合Python函数的分配参数功能,可以将4个字母用分配参数(调用函数传递实参时使用星号来传递多个参数,相关介绍请参考《python基础教程 http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_9831699.html》的《 第5.3节 详说Python风格的函数分配参数 http://iyenn.com/rec/325801.html》)的形参方式表示,如: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:videomyvideo.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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

五、小结

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

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

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

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

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

老猿Python, 跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

文章知识点与官方知识档案匹配,可进一步学习相关知识
OpenCV技能树视频分析光流20472 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/115716366"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top