Opencv4 c++ 自用筆記 03 滑動條、相機與視頻操作

1. 相機與視頻操作

1.1 打開視頻/相機

OpenCV 中 imread() 只能讀取靜態圖像,若要讀取視頻文件或攝像頭流,需要使用 VideoCapture 類:

// 構造函數
cv::VideoCapture::VideoCapture();                      
cv::VideoCapture::VideoCapture(const std::string& filename, int apiPreference = cv::CAP_ANY);  // 打開視頻文件,apiPreference為設置屬性
cv::VideoCapture::VideoCapture(int index, int apiPreference = cv::CAP_ANY);                     // 打開攝像頭,index 為設備 ID// 或者先默認構造,再調用 open()
VideoCapture cap;
cap.open("example.avi");
cap.open(0);

1.2 讀取并播放視頻

VideoCapture video("example.avi");
if (!video.isOpened()) {std::cerr << "Error: 無法打開視頻文件!" << std::endl;return -1;
}double fps = video.get(cv::CAP_PROP_FPS);  // 讀取幀率
int delay = static_cast<int>(1000.0 / fps); // 每幀顯示時長(毫秒)while (true) {cv::Mat frame;video >> frame;                // 讀取下一幀到 frameif (frame.empty()) break;      // 視頻結束或讀取失敗則退出cv::imshow("Video Playback", frame);if (cv::waitKey(delay) == 'q') break;
}
video.release();
cv::destroyAllWindows();

2. 視頻屬性查詢

使用 VideoCapture::get(propId) 可以獲取視頻或攝像頭流的各種參數:

Property參數 ID
當前播放位置(毫秒)CAP_PROP_POS_MSEC (0)
視頻寬度CAP_PROP_FRAME_WIDTH (3)
視頻高度CAP_PROP_FRAME_HEIGHT (4)
幀率CAP_PROP_FPS (5)
編解碼器CAP_PROP_FOURCC (6)
總幀數CAP_PROP_FRAME_COUNT (7)
返回圖像格式CAP_PROP_FORMAT (8)
攝像頭專屬屬性
亮度CAP_PROP_BRIGHTNESS (10)
對比度CAP_PROP_CONTRAST (11)
飽和度CAP_PROP_SATURATION (12)
色調CAP_PROP_HUE (13)
增益CAP_PROP_GAIN (14)

示例:

double width  = video.get(cv::CAP_PROP_FRAME_WIDTH);
double height = video.get(cv::CAP_PROP_FRAME_HEIGHT);

3. 視頻寫入與保存

3.1 VideoWriter

// 構造函數
cv::VideoWriter::VideoWriter();
cv::VideoWriter::VideoWriter(const std::string& filename,int fourcc, double fps, cv::Size frameSize, bool isColor = true);

filename:輸出文件路徑及名稱(帶后綴)
fourcc:編碼格式,使用 VideoWriter::fourcc('M','J','P','G') 等,-1為自動采用合適的編解碼器
fps:輸出幀率
frameSize:視頻分辨率(寬, 高)
isColor:是否彩色(true/false

3.2 保存攝像頭視頻

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int main() {VideoCapture cap(0);if (!cap.isOpened()) {cerr << "Error: 無法打開攝像頭!" << endl;return -1;}// 讀取第一幀以獲取格式Mat frame;cap.read(frame);bool isColor = (frame.type() == CV_8UC3);// 配置 VideoWriterint codec = VideoWriter::fourcc('M','J','P','G');double fps = 30.0;Size size(640, 480);VideoWriter writer("output.avi", codec, fps, size, isColor);if (!writer.isOpened()) {cerr << "Error: 無法創建視頻寫入器!" << endl;return -1;}// 循環讀取并寫入while (1) {if (!cap.read(frame) || frame.empty()) {cerr << "Error: 無法讀取幀或幀為空!" << endl;break;}writer.write(frame);imshow("Capture & Save", frame);if (waitKey(30) == 'q') {cout << "退出程序" << endl;break;}}cap.release();writer.release();destroyAllWindows();return 0;
}

4. 窗口交互與滑動條

4.1 創建滑動條

createTrackbar(trackbarName, windowName, &value, maxCount, callback, userdata=0);

trackbarName:滑動條名稱
windowName:所屬窗口名稱
value:滑動條的當前值(整型指針)
maxCount:滑動條最大值
callback:回調函數,每次滑動時調用
userdata:用戶自定義數據指針(可選)

4.2 示例:圖像閾值調整

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int maxValue = 127;
Mat gray, binary;void callback(int, void*) {adaptiveThreshold(gray, binary, maxValue,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY, 11, 2);imshow("Thresh", binary);
}int main() {string inputPath  = "/home/user/test.jpg";string outputPath = "/home/user/outputs.jpg";gray = imread(inputPath, IMREAD_GRAYSCALE);if (gray.empty()) {cerr << "Error: 無法讀取輸入圖像!" << endl;return -1;}namedWindow("Thresh");createTrackbar("MaxValue", "Thresh", &maxValue, 255, onTrackbar);// 初始顯示onTrackbar(0, nullptr);while (true) {char key = (char)waitKey(10);if (key == 'q') {imwrite(outputPath, binary);cout << "結果已保存到: " << outputPath << endl;break;}}destroyAllWindows();return 0;
}

回調函數簽名void callback(int pos, void* userdata);
每次滑動時,pos 為當前滑動位置,可用全局變量或 getTrackbarPos() 獲取最新值。

5. 相機圖像處理示例

上述代碼中實現了利用滑動條調整二值化圖像中的閾值,核心在于callback函數對圖像的更新。

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int maxValue = 127;
Mat gray, binary;void callback(int, void*) {adaptiveThreshold(gray, binary, maxValue,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY, 11, 2);imshow("Binary", binary);
}int main() {VideoCapture cap(0);if (!cap.isOpened()) {cerr << "Error: 無法打開攝像頭!" << endl;return -1;}namedWindow("Binary");createTrackbar("Threshold", "Binary", &maxValue, 255, onTrackbar);while (1) {Mat frame;cap >> frame;if (frame.empty()) {cerr << "Error: 捕獲幀為空!" << endl;break;}// 轉灰度并二值化cvtColor(frame, gray, COLOR_BGR2GRAY);onTrackbar(0, nullptr);  // 初始更新一次imshow("Binary", binary);if (waitKey(30) == 'q') {destroyWindow("Binary");break;}}cap.release();return 0;
}

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

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

相關文章

身份證發給別人怎么加水印?賽文奧特曼身份證添加水印教程

我們經常需要使用身份證照片進行身份驗證、資料提交等操作。然而&#xff0c;直接將身份證照片發送給他人或上傳到網絡存在一定的信息泄露風險。為了更好地保護個人隱私&#xff0c;我們可以使用 簡鹿水印助手 這款工具&#xff0c;在身份證照片上添加專屬水印&#xff0c;從而…

十、【核心功能篇】項目與模塊管理:前端頁面開發與后端 API 聯調實戰

【核心功能篇】項目與模塊管理&#xff1a;前端頁面開發與后端 API 聯調實戰 前言準備工作第一部分&#xff1a;完善項目管理功能 (Project)1. 創建/編輯項目的表單對話框組件 第二部分&#xff1a;模塊管理功能 (集成到項目詳情頁)1. 創建模塊相關的 API 服務 (src/api/module…

ES分詞搜索

ES的使用 前言作者使用的版本作者需求 簡介ES簡略介紹ik分詞器簡介 使用es的直接簡單使用es的查詢 es在java中使用備注說明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一個業務需求&#xff0c;我們系統有份數據被…

Axure設計案例——科技感立體柱狀圖

想讓你的數據展示告別平淡無奇&#xff0c;成為吸引全場目光的焦點嗎&#xff1f;快來瞧瞧這個Axure設計的科技感立體柱狀圖案例&#xff01;科技感設計風格借助逼真的立體效果打破傳統柱狀圖的平面感&#xff0c;營造出一種令人眼前一亮的視覺震撼。每一個柱狀體都仿佛是真實存…

惡意npm與VS Code包竊取數據及加密貨幣資產

60個npm包竊取系統敏感信息 安全研究人員在npm軟件包注冊表中發現60個惡意組件&#xff0c;這些組件能夠收集主機名、IP地址、DNS服務器和用戶目錄信息&#xff0c;并將其發送至Discord平臺控制的終端節點。據Socket安全研究員Kirill Boychenko上周發布的報告顯示&#xff0c;…

leetcode 2359. 找到離給定兩個節點最近的節點

給你一個 n 個節點的 有向圖 &#xff0c;節點編號為 0 到 n - 1 &#xff0c;每個節點 至多 有一條出邊。 有向圖用大小為 n 下標從 0 開始的數組 edges 表示&#xff0c;表示節點 i 有一條有向邊指向 edges[i] 。如果節點 i 沒有出邊&#xff0c;那么 edges[i] -1 。 同時…

1. pytorch手寫數字預測

1. pytorch手寫數字預測 1.背景2.準備數據集2.定義模型3.dataloader和訓練4.訓練模型5.測試模型6.保存模型 1.背景 因為自身的研究方向是多模態目標跟蹤&#xff0c;突然對其他的視覺方向產生了興趣&#xff0c;所以心血來潮的回到最經典的視覺任務手寫數字預測上來&#xff0…

AWS WebRTC:獲取ICE服務地址(part 2): ICE Agent的作用

上一篇&#xff0c;已經獲取到了ICE服務地址&#xff0c;從返回結果中看&#xff0c;是兩組TURN服務地址。 拿到這些地址有什么用呢&#xff1f;接下來就要說到WebRTC中ICE Agent的作用了&#xff0c;返回的服務地址會傳給WebRTC最終給到ICE Agent。 ICE Agent的作用&#xf…

大數據時代的利劍:Bright Data網頁抓取與自動化工具共建高效數據采集新生態

目錄 一、為何要選用Bright Data網頁自動化抓取——幫助我們高效高質解決以下問題&#xff01; 二、Bright Data網頁抓取工具 - 網頁爬蟲工具實測 2.1 首先注冊用戶 2.2 首先點擊 Proxies & Scraping &#xff0c;再點擊瀏覽器API的開始使用 2.3 填寫通道名稱&#xff…

指紋識別+精準化POC攻擊

開發目的 解決漏洞掃描器的痛點 第一就是掃描量太大&#xff0c;對一個站點掃描了大量的無用 POC&#xff0c;浪費時間 指紋識別后還需要根據對應的指紋去進行 payload 掃描&#xff0c;非常的麻煩 開發思路 我們的思路分為大體分為指紋POC掃描 所以思路大概從這幾個方面…

【Day40】

DAY 40 訓練和測試的規范寫法 知識點回顧&#xff1a; 彩色和灰度圖片測試和訓練的規范寫法&#xff1a;封裝在函數中展平操作&#xff1a;除第一個維度batchsize外全部展平dropout操作&#xff1a;訓練階段隨機丟棄神經元&#xff0c;測試階段eval模式關閉dropout 作業&#x…

【HTML-13】HTML表格合并技術詳解:打造專業數據展示

表格是HTML中展示結構化數據的重要元素&#xff0c;而表格合并則是提升表格表現力的關鍵技術。本文將全面介紹HTML中的表格合并方法&#xff0c;幫助您創建更專業、更靈活的數據展示界面。 1. 表格合并基礎概念 在HTML中&#xff0c;表格合并主要通過兩個屬性實現&#xff1a…

<uniapp><threejs>在uniapp中,怎么使用threejs來顯示3D圖形?

前言 本專欄是基于uniapp實現手機端各種小功能的程序,并且基于各種通訊協議如http、websocekt等,實現手機端作為客戶端(或者是手持機、PDA等),與服務端進行數據通訊的實例開發。 發文平臺 CSDN 環境配置 系統:windows 平臺:visual studio code、HBuilderX(uniapp開…

如何制作全景VR圖?

全景VR圖&#xff0c;特別是720度全景VR&#xff0c;為觀眾提供一種沉浸式體驗。 全景VR圖能夠捕捉場景的全貌&#xff0c;還能將多個角度的圖片或視頻無縫拼接成一個完整的全景視角&#xff0c;讓觀眾在虛擬環境中自由探索。隨著虛擬現實&#xff08;VR&#xff09;技術的飛速…

前端使用qrcode來生成二維碼的時候中間添加logo圖標

這個開源倉庫可以讓你在前端頁面中生成二維碼圖片&#xff0c;并且支持調整前景色和背景色&#xff0c;但是有個問題&#xff0c;就是不能添加logo圖片。issue&#xff1a; GitHub Where software is built 但是已經有解決方案了&#xff1a; add a logo picture Issue #21…

【C語言】函數指針及其應用

目錄 1.1 函數指針的概念和應用 1.2 賦值與內存模型 1.3 調用方式與注意事項 二、函數指針的使用 2.1 函數指針的定義和訪問 2.2 動態調度&#xff1a;用戶輸入驅動函數執行 2.3 函數指針數組進階應用 2.4 函數作為參數的高階抽象 三、回調函數 3.1 指針函數…

安裝flash-attention失敗的終極解決方案(WINDOWS環境)

想要看linux版本下安裝問題的請走這里&#xff1a;安裝flash-attention失敗的終極解決方案&#xff08;LINUX環境&#xff09; 其實&#xff0c;現在的flash-attention不像 v2.3.2之前的版本&#xff0c;基本上不兼容WINDOWS環境。但是在WINDOWS環境安裝總還是有那么一點不順暢…

[C]基礎16.數據在內存中的存儲

博客主頁&#xff1a;向不悔本篇專欄&#xff1a;[C]您的支持&#xff0c;是我的創作動力。 文章目錄 0、總結1、整數在內存中的存儲1.1 整數的二進制表示方法1.2 不同整數的表示方法1.3 內存中存儲的是補碼 2、大小端字節序和字節序判斷2.1 什么是大小端2.2 為什么有大小端2.3…

Python 基于卷積神經網絡手寫數字識別

Ubuntu系統&#xff1a;22.04 python版本&#xff1a;3.9 安裝依賴庫&#xff1a; pip install tensorflow2.13 matplotlib numpy -i https://mirrors.aliyun.com/pypi/simple 代碼實現&#xff1a; import tensorflow as tf from tensorflow.keras.models import Sequent…

ElectronBot復刻-電路測試篇

typec-16p 接口部分 USB1&#xff08;Type - C 接口&#xff09;&#xff1a;這是通用的 USB Type - C 接口&#xff0c;具備供電和數據傳輸功能。 GND 引腳&#xff08;如 A1、A12、B1、B12 等&#xff09;&#xff1a;接地引腳&#xff0c;用于提供電路的參考電位&#xff0…