在统信UOS Linux下用opencv-python捕获摄像头输入保存到视频文件

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

一、引言

老猿在CSDN的《opencv-python图形图像处理入门基础知识》介绍了一个利用电脑摄像头获取输入视频生成到文件的案例,这个案例当时基于windows的。在《统信UOS Linux下安装opencv-python过程详解》介绍的在统信UOS Linux操作系统下安装opencv-python的步骤,在安装opencv-python完成后想复用该案例作为测试,但测试过程并不一帆风顺。

二、首次修改和测试情况

首次修改是在《opencv-python图形图像处理入门基础知识》基础上将windows路径改为了linux路径,直接执行报错摄像头打开失败:

在这里插入图片描述

经仔细走读代码,发现是如下语句传参存在问题:

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)

这个代码多传了一个参数,原来windows下可能有容错性,但Linux下不行,将后一个参数去除即可。

三、生成的视频无法播放

在修改上面的代码之后,再执行python ./captureVideo.py程序,摄像窗口正常显示,退出后文件正常生成,但无法进行播放。
多次测试之后,发现视频帧大小必须设置为打开窗口大小完全一致才能播放保存的视频文件,用如下代码对视频的帧宽度和高度赋值才行(用与视频窗口大小相同的固定值也可以):

  WIDTH = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
  HEIGHT = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

这样保存的文件就能正常播放了,可见opencv-python的windows版本和Linux版本的处理上还是有所不同的,Linux下对参数要求更严格。

最后完整的代码如下:

import cv2 

def captureVideoFromCamera():
    cap = cv2.VideoCapture(0)
  
    WIDTH = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    HEIGHT = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print(f"视频分辨率:({WIDTH},{HEIGHT})")
  
    FILENAME = r'/data/home/administrator/temp/test.avi'

    FPS = 24
    cap.set(cv2.CAP_PROP_FPS, FPS)
    # 建议使用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()

四、小结

本文介绍了在统信UOS Linux下用opencv-python捕获摄像头输入保存到视频文件的实现代码与windows的差别,opencv-python的windows版本和Linux版本的处理上还是有所不同的,windows下的容错性高一些,Linux下对参数要求更严格,因此相同的代码Linux下要更注意细节。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于统信操作系统及opencv的介绍的内容请参考专栏《国产信创之光》的其他文章。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析

在如今的信息时代,软件已经成为人们日常工作和生活不可或缺的一部分。然而,随着软件的发展和应用范围的不断扩大,软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…

Kubernetes/k8s的存储卷/数据卷

k8s的存储卷/数据卷 容器内的目录和宿主机的目录挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消失…

门店管理系统驱动智慧零售升级

在当今数字化经济的大潮中,实体门店正在经历一场由内而外的深度变革。门店管理系统以其高效、便捷和全面的功能特性,为实体店提供了高效的运营解决方案。 门店管理系统拜托了传统零售业对本地化软件的依赖,它将复杂的信息技术转化为易于获取…

Python 爬虫常用的库或工具推荐

在数据驱动的时代,Python爬虫技术以其简单易用、强大灵活的特性成为数据采集的有效手段,越来越多人加入了学习Python的队伍中,今天,我们就为大家推荐一些常用的Python爬虫库和工具,以备不时之需。 1.库 Requests库&am…

在软件测试过程中如何有效的开展接口自动化测试

一.简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&#…

阿里云OSS上传视频,可分片上传

uniappH5实现 阿里云OSS上传视频 示例图: 上传视频完整示例代码: 使用npm安装SDK开发包,安装命令为 npm install ali-oss --save accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是&#x…

​软件测试面试:关键问题解析

在软件开发领域,测试是确保软件质量的重要环节。面试是评估软件测试人员技能和经验的关键时刻。在一个软件测试面试中,面试官通常会问一系列问题来评估面试者的知识、技能和解决问题的能力。本文将介绍一些常见的软件测试面试问题,并给出一些…

网站内容无法复制,怎么办?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

基于ssm阅微文学网站的设计与开发+vue论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

应用案例 | 使用Softing PROFIBUS Tester 5解决网络问题

PROFIBUS是在工业自动化领域里被广泛使用的现场总线协议,它具有高可靠性、低成本等优势,主要应用于制造业、能源、交通等领域。然而,随着时间的推移,PROFIBUS网络也不可避免地会出现一些组件老化的问题,从而对其性能和…

车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图) 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于RBF径向基神经网络的车速预测模型…

漫画演绎策略设计模式

引言 本篇主要通过一小篇漫画的形式给大家讲讲策略模式,由于策略模式本身不是很难,这里就不花太多的言辞描述了,一起看漫画吧 普通设计 从前有一个妈妈,她有一个叛逆的儿子,妈妈每天除了上下班就是要教育儿子&#…

XTuner 大模型单卡低成本微调原理

文章目录 Finetune简介增量预训练微调指令跟随微调微调原理 XTuner微调框架XTuner数据引擎XTuner微调的优化策略 动手实战 Finetune简介 微调模式: 增量预训练微调 使用场景:让基座模型学习到一些新知识,如某个垂直领域的常识训练数据&…

微信小程序swiper实现层叠轮播图

在微信小程序中,需要实现展示5个,横向层叠的轮播图效果,轮播图由中间到2侧的依次缩小.如下图 使用原生小程序进行开发,没有使用Skyline模式,所以layout-type配置项也无效。所以基于swiper组件进行调整。 主要思路就是设置不同的样式&#xff…

勒索软件组织“黑猫”攻击英国国防公司 Ultra 的美国子公司得手

英国国防公司 Ultra 的美国子公司 Ultra Intelligence & Communications (Ultra I&C) 遭到 ALPHV (BlackCat) 勒索软件组织的攻击。 暗网上出现的信息显示,ALPHV 黑客在他们的博客上发布了 Ultra I&C 数据。据他们称,在 2023 年 12 月 27 日…

热点报告 | “尔滨”火出东北,本期热点带你盘活冬季营销

您是否曾有以下困惑?打开小红书首页推荐,似乎已经被算法教育成了成熟的信息茧房,想要找到下一个热点,又忧虑一叶以障目;看着搜索框热词,又担心无法掌握热词背后的话题命脉,难以在浮光掠影中寻找…

FastAPI + NGINX + Gunicorn 部署域名接口

简介: 今天接到一个活,给了我一台云服务器、域名,然后用FastAPINGINX来部署接口,接口的url是由域名组成的。话不多说直接看效果: 1.安装相关工具 1.1、 安装python: 如果已经安装python就跳过咯 sudo apt update sudo apt inst…

使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性

前言:什么是集成配置系统? 集成配置系统的主要目的是将应用程序的配置信息与代码分离,使得配置信息可以在不需要修改代码的情况下进行更改。这样可以提高应用程序的灵活性和可维护性。 ASP.NET Core 提供了一种灵活的配置系统,可…

C++-windows-linux-linuxdeployqt打包QT应用程序

1.windows下的qt5.14 1.1发布:发布这个选项的,也就是左下角改debug为release,设置后,点击编译build会在release中发现exe文件,直接执行exe会报错;缺失各种库。 QT命令行 要用Qt的命令行终端执行发布命令 …

零基础小白如何自学sql?

学习SQL对于数据分析和处理来说非常重要。SQL是一种强大的工具,可以帮助你与数据库沟通,提取,整理和理解数据。 以下是一些学习SQL的建议: 01 前期:SQL数据库学习 了解SQL的基本概念:首先,你…