Python OpenCV圖像處理與深度學習:Python OpenCV視頻處理入門

視頻處理基礎:掌握OpenCV視頻操作

學習目標

通過本課程,學員們將學習如何使用Python和OpenCV庫來處理視頻文件,包括讀取視頻、捕獲攝像頭視頻流、處理視頻幀以及保存處理后的視頻,同時,能夠獨立完成基本的視頻處理任務。

相關知識點

  • Python OpenCV視頻處理基礎

學習內容

1 Python OpenCV視頻處理基礎

1.1 使用OpenCV讀取視頻文件

在開始視頻處理之前,首先需要了解如何使用OpenCV讀取視頻文件。OpenCV提供了一個非常方便的接口cv2.VideoCapture,可以用來打開視頻文件或攝像頭。這個接口不僅可以讀取本地文件,還可以處理網絡視頻流。

1.1.1 讀取視頻文件

要讀取一個視頻文件,首先需要創建一個VideoCapture對象,傳入視頻文件的路徑。然后,通過循環調用read()方法來逐幀讀取視頻。read()方法返回一個布爾值和一個圖像幀,布爾值表示是否成功讀取了下一幀,圖像幀則是當前讀取到的視頻幀。

import cv2
from matplotlib import pyplot as plt# 創建一個VideoCapture對象,參數是視頻文件的路徑
cap = cv2.VideoCapture('path_to_video.mp4')# 檢查是否成功打開視頻文件
if not cap.isOpened():print("Error: Could not open video.")exit()# 逐幀讀取視頻
while cap.isOpened():ret, frame = cap.read()if not ret:break# 顯示當前幀cv2.imshow('Frame', frame)# 按'q'鍵退出循環if cv2.waitKey(25) & 0xFF == ord('q'):break# 釋放VideoCapture對象
cap.release()
cv2.destroyAllWindows()
1.1.2 獲取視頻屬性

VideoCapture對象還提供了一些方法來獲取視頻的屬性,例如幀率、分辨率等。這些屬性對于視頻處理非常重要,可以更好地控制視頻的讀取和處理過程。

# 獲取視頻的幀率
fps = cap.get(cv2.CAP_PROP_FPS)
print(f"Frames per second: {fps}")# 獲取視頻的寬度和高度
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(f"Video resolution: {width}x{height}")
1.2 捕獲攝像頭視頻流

除了讀取視頻文件,OpenCV還支持從攝像頭捕獲視頻流。這在實時視頻處理和監控系統中非常有用。捕獲攝像頭視頻流的方法與讀取視頻文件類似,只需要將VideoCapture對象的參數設置為攝像頭的索引(通常是0)。

1.2.1 捕獲攝像頭視頻流
# 創建一個VideoCapture對象,參數是攝像頭的索引
cap = cv2.VideoCapture(0)# 檢查是否成功打開攝像頭
if not cap.isOpened():print("Error: Could not open camera.")exit()# 逐幀讀取視頻
while cap.isOpened():ret, frame = cap.read()if not ret:break# 顯示當前幀cv2.imshow('Camera', frame)# 按'q'鍵退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放VideoCapture對象
cap.release()
cv2.destroyAllWindows()
1.2.2 設置攝像頭屬性

與讀取視頻文件類似,也可以設置攝像頭的屬性,例如分辨率、幀率等。這可以通過set方法來實現。

# 設置攝像頭的分辨率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)# 設置攝像頭的幀率
cap.set(cv2.CAP_PROP_FPS, 30)
1.3 處理和保存視頻幀

在讀取視頻幀之后,通常需要對視頻幀進行處理,例如灰度化、濾波、邊緣檢測等。處理后的視頻幀可以保存為新的視頻文件,以便后續使用。

1.3.1 處理視頻幀

假設想要將視頻幀轉換為灰度圖像,并進行高斯模糊處理。可以使用OpenCV的cvtColorGaussianBlur函數來實現。

# 創建一個VideoCapture對象
cap = cv2.VideoCapture('path_to_video.mp4')# 檢查是否成功打開視頻文件
if not cap.isOpened():print("Error: Could not open video.")exit()# 逐幀讀取視頻
while cap.isOpened():ret, frame = cap.read()if not ret:break# 將當前幀轉換為灰度圖像gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 對灰度圖像進行高斯模糊處理blurred_frame = cv2.GaussianBlur(gray_frame, (15, 15), 0)# 顯示處理后的幀cv2.imshow('Processed Frame', blurred_frame)# 按'q'鍵退出循環if cv2.waitKey(25) & 0xFF == ord('q'):break# 釋放VideoCapture對象
cap.release()
cv2.destroyAllWindows()
1.3.2 保存處理后的視頻幀

處理后的視頻幀可以保存為新的視頻文件。OpenCV提供了一個VideoWriter類來實現這一功能。VideoWriter需要指定輸出文件的路徑、編碼器、幀率和幀大小。

# 創建一個VideoCapture對象
cap = cv2.VideoCapture('path_to_video.mp4')# 檢查是否成功打開視頻文件
if not cap.isOpened():print("Error: Could not open video.")exit()# 獲取視頻的幀率和分辨率
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 創建一個VideoWriter對象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output_video.avi', fourcc, fps, (width, height), isColor=False)# 逐幀讀取視頻
while cap.isOpened():ret, frame = cap.read()if not ret:break# 將當前幀轉換為灰度圖像gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 對灰度圖像進行高斯模糊處理blurred_frame = cv2.GaussianBlur(gray_frame, (15, 15), 0)# 寫入處理后的幀out.write(blurred_frame)# 顯示處理后的幀cv2.imshow('Processed Frame', blurred_frame)# 按'q'鍵退出循環if cv2.waitKey(25) & 0xFF == ord('q'):break# 釋放VideoCapture和VideoWriter對象
cap.release()
out.release()
cv2.destroyAllWindows()

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95347.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI 賦能 Java 開發效率:全流程痛點解決與實踐案例(四)

文檔與注釋自動化:從 “手動撰寫” 到 “實時同步”,降低維護成本 📄 Java 開發強調 “文檔先行”,Javadoc 注釋、架構文檔、接口文檔是項目維護的重要資產。但手動撰寫文檔存在兩大痛點:一是耗時(開發者平…

【機器學習學習筆記】pandas基礎

零基礎入門 Pandas:數據處理的 "萬能工具"如果你是剛接觸數據分析的小白,一定聽過 "Pandas" 這個名字。簡單說,Pandas 是 Python 中專門用來處理數據的工具庫,就像 Excel 的 "高級版"—— 能更快、…

(Mysql)MVCC、Redo Log 與 Undo Log

1. MVCC(多版本并發控制)概念 MVCC(Multi-Version Concurrency Control)是一種數據庫并發控制機制,用于解決 讀寫沖突,提高數據庫并發性能。MySQL InnoDB 存儲引擎使用 MVCC 來實現 非阻塞讀(即…

OpenCV-Python Tutorial : A Candy from Official Main Page(五)

4.5FAST Algorithm for Corner Detection 4.5.1FAST算法 我們已了解多種特征檢測器,其中許多效果出色。但從實時應用的角度來看,它們的速度仍不夠快。一個典型例子是計算資源有限的SLAM(同步定位與建圖)移動機器人。 為解決此問…

LINUX 91 SHELL:刪除空文件夾 計數

問題 [rootweb ~]# find -type f -exec echo "file:{}" $path; find: 遺漏“-exec”的參數 您在 /var/spool/mail/root 中有郵件[rootweb ~]# $path/root -bash: /root: 沒有那個文件或目錄 您在 /var/spool/mail/root 中有新郵件 [rootweb ~]# path/root [rootweb ~…

視頻軟解碼技術詳解:原理、應用與未來發展

視頻軟解碼的基本原理 概念解析:CPU主導的通用解碼方式 視頻軟解碼是一種完全依賴通用CPU執行解碼算法的視頻還原技術,其核心特征在于不依賴任何專用硬件模塊,而是通過軟件程序調用CPU的通用計算能力完成壓縮視頻數據的解碼過程[1][2]。與硬…

線性回歸中梯度下降與正規方程以及擬合問題與正則化

線性回歸實戰指南:從理論到實踐 目錄 線性回歸理論基礎機器學習項目開發流程波士頓房價預測實戰梯度下降與正規方程模型評估指標擬合問題與正則化總結與展望 1. 線性回歸理論基礎 1.1 什么是線性回歸? 線性回歸是一種監督學習算法,用于預…

為什么46.1k程序員都在用這個AI繪畫神器?我體驗一周后終于明白了

大家好,我是顧北,一名AI應用探索者,也是GitHub開源項目收集者。說起AI繪畫這事兒,我之前真的是又愛又恨。上個月想給朋友搞張生日賀圖,結果在Stable Diffusion WebUI里折騰了大半天。采樣步數?CFG比例&…

Java基礎第8天總結(map遍歷、Stream流)

選中一部分代碼,然后CTRLALTT,可以在外面套上while循環,try..catch之類的小案例:電影信息管理模塊:用戶可以上架、查詢、下架、下架某個主演參演的電影package Demo;import lombok.AllArgsConstructor; import lombok.Data; impor…

總線矩陣的原理

總線矩陣(Bus Matrix)是多主設備共享多從設備的智能連接與仲裁核心,本質是一個“靈活的交叉開關陣列”,用于解決多個主設備(如CPU、DMA、GPU)同時訪問多個從設備(如內存、外設、存儲芯片&#x…

硬件開發_基于Zigee組網的果園養殖監控系統

一.系統概述 果園環境監控系統功能如下: 核心控制器:以STM32為核心控制器,承擔整體的數據采集、處理及控制任務。環境參數監測:集成溫度傳感器、CO?傳感器、光照傳感器和土壤濕度傳感器,可實時采集果園內的溫度、二氧…

K8s調度核心:從Pod分配到節點優化

在 Kubernetes(K8s)中,Pod 調度是指 K8s 系統根據特定規則和策略,將 Pod 合理分配到集群中的某個節點(Node)上運行的過程。其核心目標是確保 Pod 在合適的節點上高效、穩定地運行,充分利用集群資…

Tomcat 企業級運維實戰系列(四):Tomcat 企業級監控

Tomcat 企業級運維實戰系列(四):Tomcat 企業級監控一:監控工具1)概述2)流程3)部署二:監控命令1)jps2)jstack3)jmap4)MAT 工具分析三&a…

技術干貨丨HyperMesh 新界面功能與技術升級解析

全文內容選自 Altair 區域技術交流會華東站Altair 高級技術經理 張晨《HyperWorks 2025:下一代建模可視化和二次開發平臺》演講1、引言今天我為大家介紹 HyperMesh——這個大家既熟悉又陌生的工具。說熟悉,是因為它一直是工程仿真領域的主流建模軟件&…

《IC驗證必看|隨機穩定性 / 再現性》

同一用例 A 機 pass、B 機 fail?——SystemVerilog 隨機穩定性 / 可復現性全攻略(含代碼與排查清單)你該到什么水平?(對標 20k / 25k / 30k) 20k(入門會用) 會 randomize()、$urando…

字符編碼的本質

目的 最近做一個加密方面的研究,加密之后的二進制,通過轉碼之后,再也找不回之前的二進制了。 怎么試都不行,真是非常得奇怪!!!!先說說字符編碼基礎知識 在信息技術的海洋中&#xff…

網格圖--Day03--網格圖DFS--2658. 網格圖中魚的最大數目,1034. 邊界著色,1020. 飛地的數量

網格圖–Day03–網格圖DFS–2658. 網格圖中魚的最大數目,1034. 邊界著色,1020. 飛地的數量 今天要訓練的題目類型是:【網格圖DFS】,題單來自靈艾山茶府。 適用于需要計算連通塊個數、大小的題目。 部分題目做法不止一種&#xff0…

新能源車焊接中發那科機器人保護氣省氣方法

在新能源汽車制造領域,焊接工藝是保障車身結構強度與安全性的關鍵環節,發那科焊接機器人憑借高精度與穩定性成為產線主力設備。保護氣體消耗在焊接成本中占比顯著,尋找高效省氣方法成為行業降本增效的核心需求。WGFACS節氣裝置以智能化控制技…

CornerNet2025再研究---將目標檢測問題視作關鍵點檢測與配對

CornerNet于2019年3月份提出,CW近期回顧了下這個在當時引起不少關注的目標檢測模型,它的亮點在于提出了一套新的方法論——將目標檢測轉化為對物體成對關鍵點(角點)的檢測。通過將目標物體視作成對的關鍵點,其不需要在圖像上鋪設先驗錨框(anc…

【C++】vector(2)

目錄 1. insert的實現 2. 迭代器失效 2.1 迭代器失效的兩種情況 指向已釋放的內存(物理失效) 元素移動導致迭代器指向錯誤(邏輯失效) 2.2 修改代碼 3. erase的實現 ?編輯修改代碼 4. resize的實現 5. 構造函數 5.1 默認…