OpenCV 視頻處理與保存


一、知識點
1、VideoCapture類
? (1)、用于從視頻文件、攝像機或圖像序列中捕獲視頻幀。
??
? (2)、構造函數 VideoCapture(const String & filename, int apiPreference = CAP_ANY)
? ? ? a、filename可以是視頻文件的名稱(例如"video.avi"),可以是圖像序列(例如"img%02.jpg", 它將讀取"img00.jpg"、"img01.jpg"、"img02.jpg"等),還可以是URL。
? ? ? b、apiPreference是實際執行捕獲的API后端,VideoCaptureAPIs枚舉值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。
?? ? ?
? (3)、構造函數 VideoCapture(int index, int apiPreference = CAP_ANY)
? ? ? a、打開攝像頭進行視頻拍攝。
?? ? ?b、index是視頻捕獲設備的索引,默認攝像頭傳遞0。
?? ? ?c、apiPreference是實際執行捕獲的API后端,VideoCaptureAPIs枚舉值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。
?? ? ?
? (4)、成員函數 virtual bool read(OutputArray image)
? ? ? a、抓取、解碼并返回一個視頻幀。
?? ? ?b、image為返回的視頻幀。 如果沒有抓取任何幀,則圖像為空,返回false。
??
? (5)、成員函數 virtual void release();
? ? ? a、關閉視頻文件或捕獲設備。
?? ? ?
? (6)、成員函數 double get(int propId) const;
? ? ? a、用于檢索視頻流的各種屬性值。
?? ? ?b、propId是VideoCaptureProperties枚舉值。
?? ? ?c、VideoCaptureProperties的具體值如:
?? ? ? ?CAP_PROP_FRAME_WIDTH=3,//視頻流中幀的寬度
?? ??? ?CAP_PROP_FRAME_HEIGHT=4,//視頻流中幀的高度
?? ??? ?CAP_PROP_FPS=5,//幀率
?? ??? ?CAP_PROP_FOURCC=6,//4個字符的編解碼器代碼
?? ??? ?CAP_PROP_FRAME_COUNT=7,//視頻文件中的幀數
?? ??? ?
?? ? ?
2、視頻分辨率
? (1)、P,Progressive,逐行掃描,即視頻縱向的像素行數。
? ? ? 如720P,分辨率為1280 * 720像素。
?? ? ?如1080P,分辨率為1920 * 1080像素。
? (2)、K,視頻橫向的像素列數。
? ? ? 如2K,分辨率為2560 * 1440像素。
?? ? ?如4K,分辨率為3840 * 2160 或 4096 * 2160像素。
?? ? ?如8K,分辨率為7680 * 4320像素。
? (3)、MP,百萬像素,即像素行數和列數相乘后的結果。
? ? ? 如2MP,是1920 * 1080 = 2073600像素,約等于2MP。
? (4)、超高清(Ultra HD),4K分辨率,3840 * 2160。
? ? ? 全高清(Full HD),1080P分辨率,1920 * 1080。
?? ? ?高清(HD),720P分辨率,1280 * 720。
?? ? ?標清(SD),480P分辨率,720 * 480。
?? ? ?
3、視頻碼率
? (1)、碼率指視頻在單位時間內傳輸或處理的數據量,單位通常是比特每秒(bps)、千比特每秒(Kbps)、兆比特每秒(Mbps)。
? (2)、它是影響視頻質量和文件大小的核心參數。
? (3)、碼率的本質是視頻數據壓縮程度的體現,在視頻編碼過程中,編碼器通過算法將原始圖像信息壓縮為更小的數據流。
? (4)、碼率越高,壓縮程度越低,圖像細節保留越多,文件體積越大; 反之,低碼率會犧牲畫質但節省存儲空間和帶寬。
??
4、視頻幀速率
? (1)、視頻幀速率,簡稱FPS,代表視頻每秒內顯示的圖像幀數。
? (2)、幀速率越高,畫面越流暢,但也需要更多的數據量來存儲和傳輸。
??
5、視頻分辨率、碼率、幀速率關系:
? (1)、相同分辨率和幀速率下,碼率越高,視頻畫面質量越出色。
? (2)、相同的分辨率和碼率下,合理范圍內,幀速率越高,視頻畫面流暢度越好。(超出合理范圍容易出現卡頓)
? (3)、相同的幀速率和碼率下,合理范圍內,分辨率越高,視頻畫面清晰度越高。(超出合理范圍容易出現噪點和模糊)
??
6、VideoWriter類
? (1)、用于編寫視頻文件或圖像序列。
? (2)、構造函數 VideoWriter(const String & filename, int fourcc, double fps, Size frameSize, bool isColor = true)
? ? ? filename: 輸出視頻文件的名稱。
?? ? ?fourcc: 壓縮幀的編解碼器。
? ? ? fps: 輸出視頻流的幀率。
?? ? ?frameSize: 視頻幀的大小。
?? ? ?isColor: true編碼器期望編碼彩色幀,false使用灰度幀。
? (3)、成員函數 virtual void write(InputArray image)
? ? ? a、將指定的圖像寫入視頻文件。
?? ? ?b、image表示要寫入的圖像,一般彩色圖像采用BGR格式,大小和構造時指定的frameSize一樣。
? (4)、virtual void release()
? ? ? a、釋放資源。
?? ? ?
7、注意:
? (1)、OpenCV不處理音頻。
? (2)、OpenCV處理視頻有大小限制,理論上不要超過2G。


二、示例代碼

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::VideoCapture capture("../images/video.mp4");double frame_width = capture.get(cv::CAP_PROP_FRAME_WIDTH);double frame_height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);double count = capture.get(cv::CAP_PROP_FRAME_COUNT);double fps = capture.get(cv::CAP_PROP_FPS);std::cout << "frame_width = " << frame_width << std::endl;std::cout << "frame_height = " << frame_height << std::endl;std::cout << "count = " << count << std::endl;std::cout << "fps = " << fps << std::endl;cv::VideoWriter writer("C:/Users/ml/Desktop/new_video.mp4", capture.get(cv::CAP_PROP_FOURCC), fps, cv::Size(frame_width, frame_height), true);cv::Mat frame;while (true){capture.read(frame);if (frame.empty()){break;}cv::imshow("視頻演示", frame);writer.write(frame);//此處時間影響"視頻演示"窗口的圖片流顯示快慢int c = cv::waitKey(33);if (c == 27){break;}}capture.release();writer.release();return 0;
}

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

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

相關文章

【Leetcode】字符串之二進制求和、字符串相乘

文章目錄 算法原理二進制求和題目鏈接題目描述解題思路代碼 字符串相乘題目鏈接題目描述解題思路代碼 算法原理 這兩道題都是屬于算法里一種經典題型&#xff1a;高精度加/減/乘/除法&#xff0c;需要我們模擬加/減/乘/除 列豎式運算。 二進制求和 題目鏈接 題目鏈接 題目描…

MongoDB:索引

目錄 1、索引數據結構&#xff1a;B-樹 2、索引類型 2.1 單字段索引 2.2 復合索引&#xff08;最重要&#xff01;&#xff09; 2.3 多鍵索引&#xff08;數組字段&#xff09; 2.4 地理空間索引 2.5 全文索引 2.6 哈希索引&#xff08;分片專用&#xff09; 2.7 TTL …

【大模型】Transformer架構完全解讀:從“盲人摸象“到“通曉萬物“的AI進化論

&#x1f916; Transformer架構完全解讀&#xff1a;從"盲人摸象"到"通曉萬物"的AI進化論 —— 一位大模型探索者的技術日記 ? 第一章&#xff1a;為什么說Transformer是AI界的"蒸汽機革命"&#xff1f; 1.1 從RNN到Transformer&#xff1a;…

JavaEE:使用JMeter進行接口并發測試

一、下載與安裝&#xff1a; 1.下載apache-jmeter-5.6.3.zip&#xff1a; https://jmeter.apache.org/download_jmeter.cgi 2.解壓到D:\Program Files\apache-jmeter-5.6.3目錄 3.添加JDK環境配置到D:\Program Files\apache-jmeter-5.6.3\bin\jmeter.bat文件開頭&#xff1…

【筆記】MSYS2 的 MinGW64 環境中正確安裝 Python 相關環境管理工具 (Poetry、Virtualenv、Pipenv 和 UV)

MSYS2 環境配置與 Python 項目依賴管理筆記_msys更新python-CSDN博客 【技術筆記】MSYS2 指定 Python 版本安裝方案_pacman -u 安裝指定版本-CSDN博客 更多關于 MSYS2 開發環境的配置&#xff0c;請查看往期筆記。 簡介 本筆記將記錄我們在 MSYS2 的 MinGW64 環境中安裝 Pytho…

ubuntu添加域名解析服務器地址

在 Ubuntu 中配置域名解析主要有兩種方式&#xff1a;靜態修改 /etc/hosts 文件 和 動態修改 DNS 解析服務器配置。以下是詳細操作指南&#xff1a; 建議優選:二、永久方案&#xff1a;修改 DNS 解析服務&#xff08;推薦&#xff09;中的方法1 一、臨時方案&#xff1a;修改…

通過 AIOps 、生成式 AI 和機器學習實現更智能的可觀測性

支持 AIOps 的理由 人工智能運維&#xff08;AIOps&#xff09;是將人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&#xff09;和分析技術應用于提升 IT 運維團隊日常工作的過程。簡單來說&#xff0c;AIOps 是軟件系統通過 AI 和 ML 以及相關分析技術來簡化和…

【DataWhale組隊學習】AI辦公實踐與應用

AI辦公-PPT制作 1. 使用大模型制作PPT的常見流程 使用大模型生成PPT的文稿將文稿的內容喂給可以直接生成PPT的大模型&#xff0c;生成PPT 2. 使用大模型生成PPT文稿 我們可以先使用上一章提過的那些大模型去生成一個PPT的文稿。那根據上一章的內容&#xff0c;我們想要去讓…

人機融合智能 | 人智交互中的機器行為設計與管理

以人工智能為代表的科學技術正在深入地塑造和改變著人類的社會、文化和經濟等,在“無所不在的算法與智能”的時代,了解智能機器的行為對于設計智能行為并使其造福于人類,對于智能機器的設計者、開發者和使用者,都具有重要意義。機器行為研究從學科交叉的視角,將智能機器行為置于…

langChainv0.3學習筆記(高級篇)

目錄 工具創建工具從函數創建工具tool 裝飾器結構化工具 從可運行對象創建工具子類化 BaseTool如何創建異步工具處理工具錯誤返回工具執行的artifact 使用內置工具和工具包自定義默認工具如何使用內置工具包 使用聊天模型調用工具定義工具模式Python 函數LangChain 工具Pydanti…

UiAutomator2 與 Appium 對比分析:安卓自動化測試框架的選擇指南

目錄 一、基礎介紹UiAutomator2Appium 二、功能對比三、架構差異UiAutomator2 架構簡圖&#xff1a;Appium 架構簡圖&#xff1a; 四、使用場景分析五、優缺點總結UiAutomator2 優點&#xff1a;UiAutomator2 缺點&#xff1a;Appium 優點&#xff1a;Appium 缺點&#xff1a; …

缺失的第一個正整數

繼續每日一題 今天給大家帶來一道將數組視為哈希表的算法 題目描述&#xff1a; 給你一個未排序的整數數組 nums &#xff0c;請你找出其中沒有出現的最小的正整數。 請你實現時間復雜度為 O(n) 并且只使用常數級別額外空間的解決方案。 題目示例&#xff1a; 由于題目要求…

單例模式-Python示例

單例模式 單例模式&#xff08;Singleton Pattern&#xff09;是設計模式中一種創建型模式&#xff0c;廣泛應用于軟件開發中。一以下以故事化的方式&#xff0c;結合詳細的技術講解&#xff0c;介紹單例模式的背景、定義、適用場景&#xff0c;并提供python的示例代碼。 故事…

啥是 SaaS

https://www.youtube.com/watch?vnpcL7oRZQlI這個視頻講了什么東西&#xff0c; 什么 idea?好的&#xff0c;這個視頻內容非常棒&#xff0c;信息量很足。下面為你詳細總結視頻講了什么&#xff0c;以及核心的 Idea 是什么。 視頻核心 Idea 這個視頻講的是一位名叫 Leandro…

Spring Boot 工程啟動以后,我希望將數據庫中已有的固定內容,打入到 Redis 緩存中,請問如何處理?

在 Spring Boot 工程中&#xff0c;將數據庫中的固定內容預先加載到 Redis 緩存中可以通過以下步驟實現。這里假設你已經配置好了 Spring Data Redis 和數據庫&#xff08;如 MySQL&#xff09;的連接。 1. 添加依賴 首先&#xff0c;確保你的 pom.xml&#xff08;Maven&…

springboot企業級項目開發之項目測試——集成測試!

集成測試 集成測試是指項目代碼在單元測試完成后進行的第二階段測試。集成測試的重點是在集成組件或單元之間交互時暴露缺陷&#xff0c;以保證不同模塊之間相互調用的正確性。在Spring Boot的項目集成測試中&#xff0c;將測試Controller和Dao的完整請求處理。應用程序在服務…

HTML 媒體(Media)

HTML 媒體&#xff08;Media&#xff09; 引言 HTML 媒體元素是構成現代網頁的重要組成部分&#xff0c;它允許我們在網頁中嵌入各種類型的媒體內容&#xff0c;如音頻、視頻、圖像等。這些元素不僅豐富了網頁的視覺效果&#xff0c;還提升了用戶體驗。本文將詳細介紹 HTML 媒…

輕量化分布式AGI架構:基于區塊鏈構建終端神經元節點的互聯網智腦

一、架構概述 該架構通過將終端設備&#xff08;如手機、IoT設備&#xff09;轉化為神經元節點&#xff0c;結合區塊鏈技術構建去中心化智能網絡&#xff0c;形成“互聯網智腦”。其核心在于突破傳統AGI算力瓶頸&#xff0c;實現數據安全共享與價值分配。 1.1 關鍵特征 分布…

【知識圖譜構建系列6】:借了張顯卡先跑著

文章目錄 前情提要mistral模型運行代碼前情提要 之前咱對LLM4KGC的代碼稍作修改,目標是用modelscope來下載模型。 現在這個代碼終于能跑了。 前面咱說,我們的顯卡只有6G的顯存。現在呢,我也成功借到了A100的顯卡。這下,咱可以先跑跑這個項目默認帶的mistral模型。 mist…

從零開始手寫redis(16)實現漸進式 rehash map

手寫 Redis 系列 java從零手寫實現redis&#xff08;一&#xff09;如何實現固定大小的緩存&#xff1f; java從零手寫實現redis&#xff08;三&#xff09;redis expire 過期原理 java從零手寫實現redis&#xff08;三&#xff09;內存數據如何重啟不丟失&#xff1f; jav…