AI基础03-视频数据采集

上篇文章我们学习了图片的数据采集,今天主要了解一下视频数据采集的方法。视频是由一系列图像构成的,其中每一张图片就是一帧。视频数据采集方法通常有自动图像采集和基于处理器的图像采集两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行视频数据的实时采集。

1、基础操作方法

在Python中使用OpenCV库录制视频是一种常见的需求,尤其是在进行视频处理、机器视觉项目或教学视频录制时。OpenCV(Open Source Computer Vision Library)提供了强大的视频处理功能,包括视频录制。

1)cv2.VideoWriter()方法

cv2.VideoWriter(video_file_name,fourcc,fps,frameSize[,isColor])

video_file_name:创建写入对象,录制视频的名称

fourcc:用来指定视频的编码格式,每个编/解码器都有一个4字符标记

fps:视频的帧速率,指视频每秒多少帧

frameSize:录制视频的窗口大小(长和宽)

isColor:判断是否为彩色图像,非零为彩色帧,否在为灰度帧

2)fourcc常用编码格式

在OpenCV中,fourcc通常是一个四字符代码,用于标识不同的编解码器。例如:

  • 'XVID' 通常用于MP4文件,特别是在使用x264编解码器时。
  • 'DIVX' 也是一个常用的编解码器,特别是在较老的系统中。
  • 'X264' 用于H.264编码,这是一种广泛使用的视频编码格式。
  • 'MJPG' 用于Motion JPEG编码,通常用于.avi文件。

举例说明:

# 定义视频编解码器和创建VideoWriter对象

# 参数分别是:输出文件名,编解码器,帧率,帧大小,是否为彩色

fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 或者使用'MJPG', 'X264', 'DIVX'等

out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

3)cv2.VideoCapture.get()方法

cv2.VideoCapture.get() 是 OpenCV 库中用于获取视频捕获设备(例如摄像头或视频文件)的属性值的方法。这个方法非常有用,因为它允许你访问和调整摄像头的各种参数,比如帧宽、帧高、帧率等。

获取摄像头的帧宽和帧高

import cv2

# 创建一个VideoCapture对象,0通常是内置摄像头的索引

cap = cv2.VideoCapture(0)

# 获取摄像头的帧宽和帧高

frame_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)

frame_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

print(f"Frame width: {frame_width}")

print(f"Frame height: {frame_height}")

# 释放VideoCapture对象

cap.release()

获取摄像头的帧率

import cv2

# 创建一个VideoCapture对象,0通常是内置摄像头的索引

cap = cv2.VideoCapture(0)

# 获取摄像头的帧率

fps = cap.get(cv2.CAP_PROP_FPS)

print(f"Frame rate: {fps}")

# 释放VideoCapture对象

cap.release()

2、举例说明

我们试着通过通过笔记本摄像头录一段视频:

录制视频并保存的基本步骤如下:

1)使用cv2.VideoCapture(0)来获取默认摄像头。

2)使用cv2.VideoWriter来创建视频写入对象。

3)循环读取摄像头的帧,并使用write方法写入视频文件。

4)当不再需要视频写入对象时,使用release方法释放资源。

import cv2    #导入CV2库来使用

video_dir ="D:\\dewi\\project2024\\myListPractice\\pythonProject1\\test_data\\get_videos\\"
file_name = "005.avi"
video_file_name = video_dir + file_name

cap = cv2.VideoCapture(
0#开启摄像头,0指笔记本内置摄像头

#设置视频的宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height =
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

#创建视频写入对象
out_video = cv2.VideoWriter(video_file_name,
                            cv2.VideoWriter_fourcc(
"D","I","V","X"),
                           
20,(frame_width,frame_height))

  

while True:
    ret,frame = cap.read() 
#捕获帧信息
    if ret:
        out_video.write(frame)
       
print("写入成功")
   
else:
       
print("获取图片出错了!")
       
break

cap.release()  #释放摄像头
out_video.release()  #释放视频对象
cv2.destroyAllWindows()  #关闭所有图像窗口

3、进阶练习

在上一个练习的基础上,我们录取10段视频,每秒钟30帧图片。参考代码:

import cv2    #导入CV2库来使用
import time

video_dir =
"D:\\dewi\\project2024\\myListPractice\\pythonProject1\\test_data\\get_videos\\"


cap = cv2.VideoCapture(0#开启摄像头,0指笔记本内置摄像头

#设置视频的宽度和高度,帧率
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height =
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)


for seg in range(10):    #获取10段视频
    # 获取当前系统时间戳(秒)
    current_timestamp = time.time()
   
# 转换为本地时间
    current_time = time.localtime(current_timestamp)
   
# 格式化输出
    formatted_time = time.strftime("%Y-%m-%d_%H%M%S", current_time)

    file_name =
f"video_{formatted_time}.avi"  #视频名称添加当前时间的时间戳
    video_file_name = video_dir + file_name

   
#创建视频写入对象
    out_video = cv2.VideoWriter(video_file_name,
                            cv2.VideoWriter_fourcc(*
"XVID"),
                            fps,(frame_width,frame_height))

   
for count in range(300):  #每段视频为10秒,需要300帧数据,30/
        ret,frame = cap.read()  #捕获帧信息
        if ret:
            out_video.write(frame)
           
#print("写入成功")
       
else:
           
print("获取图片出错了!")
           
break

   
print(f"{seg+1}段视频录制(fps:{fps})成功:",file_name)
    out_video.release()
cap.release()
cv2.destroyAllWindows()

执行结果参考:

第1段视频录制成功: video_2025-03-30_181125.avi

第2段视频录制成功: video_2025-03-30_181136.avi

第3段视频录制成功: video_2025-03-30_181146.avi

……

在对应的文件夹下看到了录制的10段视频。

每天进步一点点,继续加油!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala 数组

Scala 数组 引言 Scala 作为一门多范式编程语言,融合了面向对象和函数式编程的特点。数组是编程语言中非常基础和常见的数据结构,在 Scala 中也不例外。本文将详细介绍 Scala 中的数组,包括其定义、操作以及在实际开发中的应用。 Scala 数…

Text-to-SQL将自然语言转换为数据库查询语句

有关Text-To-SQL方法,可以查阅我的另一篇文章,Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言,这段时间公司有这方面的需求,调研了一下市面上text2sql的方法,比如阿里的Chat2DB,麻…

golang 的strconv包常用方法

目录 1. 字符串与整数的转换 2. 字符串与浮点数的转换 3. 布尔值的转换 4. 字符串的转义 5. 补充:rune 类型的使用 方法功能详解 代码示例: 1. 字符串与整数的转换 方法名称功能描述示例Atoi将字符串转换为十进制整数。strconv.Atoi("123&q…

MATLAB详细图文安装教程(附安装包)

前言 MATLAB(Matrix Laboratory)是由MathWorks公司开发的一款高性能的编程语言和交互式环境,主要用于数值计算、数据分析和算法开发。内置数学函数和工具箱丰富,开发效率高,特别适合矩阵运算和领域特定问题。接下来就…

ShapeCrawler:.NET开发者的PPTX操控魔法

引言 在当今的软件开发领域,随着数据可视化和信息展示需求的不断增长,处理 PPTX 文件的场景日益频繁。无论是自动化生成报告、批量制作演示文稿,还是对现有 PPT 进行内容更新与格式调整,开发者都需要高效的工具来完成这些任务。传…

HTML5贪吃蛇游戏开发经验分享

HTML5贪吃蛇游戏开发经验分享 这里写目录标题 HTML5贪吃蛇游戏开发经验分享项目介绍技术栈核心功能实现1. 游戏初始化2. 蛇的移动控制3. 碰撞检测4. 食物生成 开发心得项目收获后续优化方向结语 项目介绍 在这个项目中,我使用HTML5 Canvas和原生JavaScript实现了一…

有关pip与conda的介绍

Conda vs. Pip vs. Virtualenv 命令对比 任务Conda 命令Pip 命令Virtualenv 命令安装包conda install $PACKAGE_NAMEpip install $PACKAGE_NAMEX更新包conda update --name $ENVIRONMENT_NAME $PACKAGE_NAMEpip install --upgrade $PACKAGE_NAMEX更新包管理器conda update con…

【Linux】调试器——gdb使用

目录 一、预备知识 二、常用指令 三、调试技巧 (一)监视变量的变化指令 watch (二)更改指定变量的值 set var 正文 一、预备知识 程序的发布形式有两种,debug和release模式,Linux gcc/g出来的二进制…

【Ubuntu常用命令】

1.将本地服务器文件或文件夹传输到远程服务器 文件 scp /data/a.txt administrator10.60.51.20:/home/administrator/ 文件夹 scp -r /data/ administrator10.60.51.20:/home/administrator/ 2.从远程服务器传输文件到本地服务器 scp administrator10.60.51.20:/data/a.txt /h…

golang 的time包的常用方法

目录 time 包方法总结 类型 time.Time 的方法 库函数 代码示例: time 包方法总结 类型 time.Time 的方法 方法名描述示例               ẵNow()获取当前时间和日期time.Now()Format()格式化时间为字符串time.Now().Format("2006-01-02 15…

Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据

作者:来自 Elastic James Williams 了解如何使用 Azure AI 文档智能解析包含文本和表格数据的 PDF 文档。 Azure AI 文档智能是一个强大的工具,用于从 PDF 中提取结构化数据。它可以有效地提取文本和表格数据。提取的数据可以索引到 Elastic Cloud Serve…

【ArcGIS操作】ArcGIS 进行空间聚类分析

ArcGIS 是一个强大的地理信息系统(GIS)软件,主要用于地理数据的存储、分析、可视化和制图 启动 ArcMap 在 Windows 中,点击“开始”菜单,找到 ArcGIS文件夹,然后点击 ArcMap 添加数据 添加数据 - 点击工具…

RabbitMQ消息相关

MQ的模式: 基本消息模式:一个生产者,一个消费者work模式:一个生产者,多个消费者订阅模式: fanout广播模式:在Fanout模式中,一条消息,会被所有订阅的队列都消费。 在广播…

缓存使用纪要

一、本地缓存:Caffeine 1、简介 Caffeine是一种高性能、高命中率、内存占用低的本地缓存库,简单来说它是 Guava Cache 的优化加强版,是当下最流行、最佳(最优)缓存框架。 Spring5 即将放弃掉 Guava Cache 作为缓存机…

2025年3月29日笔记

问题&#xff1a;创建一个长度为99的整数数组&#xff0c;输出数组的每个位置数字是几&#xff1f; 解题思路&#xff1a; 1.因为题中没有明确要求需要输入,所以所有类型的答案都需要写出 解法1&#xff1a; #include<iostream> #include<bits/stdc.h> using n…

hadoop相关面试题以及答案

什么是Hadoop&#xff1f;它的主要组件是什么&#xff1f; Hadoop是一个开源的分布式计算框架&#xff0c;用于处理大规模数据的存储和计算。其主要组件包括Hadoop Distributed File System&#xff08;HDFS&#xff09;和MapReduce。 解释HDFS的工作原理。 HDFS采用主从架构&…

微信小程序:数据拼接方法

1. 使用 concat() 方法拼接数组 // 在原有数组基础上拼接新数组 Page({data: {originalArray: [1, 2, 3]},appendData() {const newData [4, 5, 6];const combinedArray this.data.originalArray.concat(newData);this.setData({originalArray: combinedArray});} }) 2. 使…

Python之贪心算法

Python实现贪心算法(Greedy Algorithm) 概念 贪心算法是一种在每一步选择中都采取当前状态下最优的选择&#xff0c;从而希望导致结果是全局最优的算法策略。 基本特点 局部最优选择&#xff1a;每一步都做出当前看起来最佳的选择不可回退&#xff1a;一旦做出选择&#xf…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 AOP:实现日志记录与性能监控

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

TCP/IP协议簇

文章目录 应用层http/httpsDNS补充 传输层TCP1. 序列号与确认机制2. 超时重传3. 流量控制&#xff08;滑动窗口机制&#xff09;4. 拥塞控制5. 错误检测与校验6. 连接管理总结 网络层ARP**ARP 的核心功能**ARP 的工作流程1. ARP 请求&#xff08;Broadcast&#xff09;2. ARP 缓…