4.通过Opencv采集摄像头视频数据

2023-11-16

VideoCapture() 虚拟采集器,一般设备号从0开始

cap.read() 读取视频帧

返回值有两个,第一个为状态值,读到帧为true

第二个值为视频帧

cap.release() 释放资源

示例程序:

import cv2  #引入CV库
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300)  #设置窗口大小

#获取视频设备
cap = cv2.VideoCapture(0)
while True:
    #从摄像头读视频帧
    ret,frame = cap.read()
    #将视频帧在窗口中显示
    cv2.imshow('video',frame)
    key = cv2.waitKey(1)  #不能为0,0为等待中断,只能读取到一帧的数据
    if(key & 0xFF == ord('q')):
        break

#释放资源
cap.release() #释放视频资源
cv2.destroyAllWindows()  #释放窗口资源

运行结果:

读取视频文件

从视频文件中读取视频帧

cap = cv2.VideoCapture("文件地址")   #从文件获取视频

只处理视频,不处理音频,所以读取到的视频没有声音

播放速度设置

key = cv2.waitKey(40) 

 将视频数据录制成多媒体文件

VideoWriter()  

write()

1秒多少帧,视频的像素(宽和高)

release()   释放资源,将磁盘中的数据输出

VideoWriter()  参数

参数1:为输出文件位置

参数2:多媒体文件格式(VideoWriter_fourcc),fourcc所用编码器,Windows系统采用DIVX编码器

 参数3:帧率

参数4:分辨率大小,应为摄像头实际分辨率

示例程序:

import cv2

#创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
vw = cv2.VideoWriter("C:\\Users\\Mengyang\\Desktop\\out.mp4",fourcc,25,(640,480))
#

#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300)  #设置窗口大小

#获取视频设备
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("文件地址")   从文件获取视频

while True:
    #从摄像头读视频帧
    ret,frame = cap.read()
    #将视频帧在窗口中显示
    cv2.imshow('video',frame)
    #写数据到多媒体文件
    vw.write(frame)

    key = cv2.waitKey(1)  #不能为0,0为等待中断,只能读取到一帧的数据
    if(key & 0xFF == ord('q')):
        break

#释放资源
cap.release() #释放VideoCapture
vw.release() #释放VideoWrite
cv2.destroyAllWindows()  #释放窗口资源

代码优化

问题1:显示窗口为什么变大了?

在视频帧在窗口显示时重新设置一下窗口大小。

  

问题2:使用isOpened()判断摄像头是否已打开

问题3:采集数据时要判断数据是否获取到了

优化过的程序:

import cv2

#创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
vw = cv2.VideoWriter("C:\\Users\\Mengyang\\Desktop\\out.mp4",fourcc,25,(640,480))

#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300)  #设置窗口大小

#获取视频设备
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("文件地址")   从文件获取视频

while cap.isOpened():    #判断摄像头是否已打开,若打开返回值则为True
    #从摄像头读视频帧
    ret,frame = cap.read()
    if ret ==True : #判断是否读取到数据
        #将视频帧在窗口中显示
        cv2.imshow('video',frame)
        cv2.resizeWindow('video',300,300)  #重新设置窗口大小
        #写数据到多媒体文件
        vw.write(frame)

        key = cv2.waitKey(1)  #不能为0,0为等待中断,只能读取到一帧的数据
        if(key & 0xFF == ord('q')):
            break
    else:
        break
#释放资源
cap.release() #释放VideoCapture
vw.release() #释放VideoWrite
cv2.destroyAllWindows()  #释放窗口资源

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4.通过Opencv采集摄像头视频数据 的相关文章

随机推荐

  • 配置AOP时报错:java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to

    报错 Exception in thread main java lang ClassCastException com sun proxy Proxy2 cannot be cast to 看报错信息 显示的是动态代理生成的类无法转换到我
  • navigator.geolocation.getCurrentPosition 获取位置偏移

    navigator geolocation getCurrentPosition function position 获取当前位置成功返回 经度 coords longitude 纬度 coords latitude 准确度 coords
  • 前端Vue模板页面(组件最全)

    https github com PanJiaChen vue element admin 这里是一个真诚的 青年技术交流QQ群 761374713 不管你是大学生 社畜 想学习变成的其他人员 欢迎大家加入我们 一起成长 一起进步 真诚的欢
  • Centos7 安装 Docker Compose

    目录 一 Docker Compose 简介 二 环境准备 三 安装 四 验证 五 问题解决 一 Docker Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具 通过 Compose 您可以使用 Y
  • 九、JDK1.8—并行流与串行流

    并行流 并行流就是把一个内容分成多个数据块 并用不同的线程分 别处理每个数据块的流 Java 8 中将并行进行了优化 我们可以很容易的对数据进行并 行操作 Stream API 可以声明性地通过 parallel 与 sequential
  • web自动化测试工具之Selenium的使用

    Selenium的使用 Selenium 概述 工作原理 应用场景 安装浏览器驱动 基本使用 安装Selenium模块 注意点 使用分析 代码实现 常见方法 driver对象 定位标签元素与获取标签对象 获取文本内容与属性值 使用无界面浏览
  • Oracle 【直接加载(sqlldr direct=true)】全方位解析与性能优化[2]

    3 比较direct方式使用并行和非并行选项的性能差异 数据文件 leo test data 100000记录 控制文件 leo test ctl 日志文件 leo test log 串行直接加载sqlload sqlldr userid
  • VC++ MapWinGis篇(一)

    添加高德图层 AMapProvider h pragma once include BaseProvider h class ABaseProvider public BaseProvider public ABaseProvider La
  • What time is it?【模拟】

    题目链接 POJ 1676 题意 给你两个时间点 前一个时间点比后一个时间点快了15分钟 当然 也有可能是隔天的 现在要问是否唯一确定第一个时间 输入坑点 两个时间之间用一个空格隔开 所以一行一共可以有25个字符 我们可以枚举00 00 2
  • ABAP doi 导出程序

    PERFORM FRM OUTPUT EXCEL 38 TABLES GT RESULT USING ZHRPA038 LDF PATH FORM FRM OUTPUT EXCEL 38 TABLES PT EXCEL TYPE STAND
  • css如何让两个div上下排列_深入了解CSS层叠上下层

    1 要想理解层叠上下层 首先要先从文档流和盒模型说起 文档流 在CSS中 文档流是一个很基础也是很重要的一个概念 很多时候她被称为Document Flow 但在CSS的标准被称为Normal Flow 即普通流或常规流 大家更喜欢称之为文
  • 基于MATLAB粒子群算法求解单目标优化问题

    基于MATLAB粒子群算法求解单目标优化问题 在实际应用中 优化问题是非常常见的一类问题 而对于单目标优化问题 粒子群算法是目前被广泛采用的一种优化算法 通过对分布在搜索空间中的粒子进行适应度评估和位置调整 粒子群算法可以在较短时间内找到全
  • uniapp开发微信小程序与H5的区别(Vue)

    1 微信小程序中父组件监听子组件的事件 子组件的 listeners拿不到事件 2 微信小程序中event stopPropagation 没用 只能用vue指令的 stop来阻止 3 vue开发网页的时候 一般对于不需要响应式的数据我们可
  • python flask框架下登录注册界面_Python-用户登录 Flask-Login

    用户登录功能是 Web 系统一个基本功能 是为用户提供更好服务的基础 在 Flask 框架中怎么做用户登录功能呢 今天学习一下 Flask 的用户登录组件 Flask Login Python 之所以如此强大和流行 除了本身易于学习和功能丰
  • Nginx基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 Nginx C语言编写 战斗民族俄罗斯人所创 是高性能的 HTTP
  • Java学习之笔试面试题总结

    1 浅复制 浅克隆 被复制对象的所有变量都含有与原来的对象相同的值 而所有的对其他对象的引用仍然指向原来的对象 换言之 浅复制仅仅复制所考虑的对象 而不复制它所引用的对象 深复制 深克隆 被复制对象的所有变量都含有与原来的对象相同的值 除去
  • ctfshow-web3

    0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 这个题目一看就知道是一个文件包含漏洞 php input可以访问请求的原始数据的只读流 将post请求的数据当作php代码执行 GET ht
  • 【Dexie.js 踩坑】Failed to execute ‘transaction‘ on ‘IDBDatabase‘

    查了很多资料 显示都是 indexedDB 的报错 说是异步操作无法保证下一次操作时上一步已经完成 试了很多按顺序执行的方法都无效 再后来试着解决控制台显示的警告提示我版本控制有问题 我就把版本升级了 问题迎刃而解 Dexie 官方文档是英
  • LayuiAdmin模板(0积分免费下载,非单独框架)

    点击这里直接下LayuiAdmin模板 请选择 普通下载
  • 4.通过Opencv采集摄像头视频数据

    VideoCapture 虚拟采集器 一般设备号从0开始 cap read 读取视频帧 返回值有两个 第一个为状态值 读到帧为true 第二个值为视频帧 cap release 释放资源 示例程序 import cv2 引入CV库 创建窗口