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.pswp.cn/news/899651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899651.shtml
英文地址,請注明出處:http://en.pswp.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 緩…