OpenCV是一個開源的計算機視覺和機器學習軟體庫,OpenCV主要為開發計算機視覺程式提供一組公共的底層結構和加強商業產品中機器的感知能力,OpenCV使用BSD許可證,它可以被商用并可以修改源代碼,
OpenCV庫有超過2500個已優化的演算法,既包含了經典的也包含了最先進的計算機視覺和機器學習演算法,這些演算法可以被用來檢測和識別人臉,跟蹤移動的物體,提取物體的三維模型,從立體相機中產生3D point clouds,可以將圖片拼接來生成一張高決議度的全景影像,從影像資料庫中找到相似性的影像等,OpenCV已經有超過4萬7千的用戶群體,并且估計下載數量超過1400萬,
對于從事計算機視覺研究和開發的相關人員,熟練掌握OpenCV基本操作幾乎是每一個cver必須掌握的一個技能,本文是OpenCV學習記錄系列的第一篇,主要講解OpenCV入門-影像和視頻的讀取和保存等基本操作,為大家提供可直接運行的代碼,通過實踐來加深記憶,主要提供Python和C++代碼,
開講之前老師給大家準備了一份深度學習+CV計算機視覺學習資料,內含:兩大Pytorch、TensorFlow實戰框架原始碼資料;OpenCV、YOLO物體檢測實戰專案、計算機視覺等視頻和資料以及深度學習書籍,
記得加微領取哦!

一、影像的讀取和顯示
- Python實作
讀取并顯示影像:

保存影像:

2. C++實作

二、視頻的讀取和保存
- C++實作
讀取和顯示視頻
在opencv中讀取顯示視頻的頭檔案是highgui.hpp,視頻影像處理頭檔案imgproc.hpp,
整體代碼如下,如要測驗自己的視頻,需要將代碼段中的視頻地址更改為自己視頻的絕對路徑,

代碼決議:

VideoCapture類:視頻捕捉類,該陳述句實體化了一個物件cap,這個類可以打開和關閉視頻檔案,這個物件可以打開和關閉ffmpeg支持的所有型別的視頻檔案,

cap.open函式:根據給定的路徑,打開視頻檔案,一旦打開,當前實體cap將包含對應視頻檔案的所有資訊,
Mat frame操作:該操作用來實體化一個資料物件,該資料物件用來存放視頻幀,

cap>>frame操作:一旦進入while()回圈,就會從捕獲物件流逐幀讀取視頻檔案,

一旦我們顯示了幀,然后等待33毫秒,如果用戶在此期間按下一個鍵,我們將退出回圈,否則,33毫秒將通過,我們將再次執行回圈,在退出時,所有分配的資料都會在超出范圍時自動釋放,
加速視頻
在許多應用的需求中,希望將輸入,或捕獲影像記錄到輸出視頻流中,并保存成一個完整的視頻,OpenCV提供了一種簡單的方法,利用opencv呼叫電腦攝像頭中,可以從視頻流中捕獲到一個一個的幀,并將這些幀逐一顯示,我們也可以創建一個寫入功能,使得這一個個的幀能夠逐一被放入到視頻中,在opencv中cv::VideoWriter類就可以實作這個功能,
下面程式段的功能為:調整輸入視頻的播放速度,并將新速度的視頻保存為.avi檔案,
主要操縱的就是一個引數:幀率(fps),

上述代碼中主要的操作就是對cv::VideoWriter這個類實體化出來的writer物件的操作,
writer.open(out_path, CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’), fps, size);
該函式有以下幾個引數:
out_path:該引數是寫入視頻后,保存avi檔案的路徑+檔案名
CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’):確定輸出視頻的編碼規則,
fps:該引數表示輸出視頻的幀率,本例子中就是將幀率改成了原始視頻的兩倍,實作倍速播放,
size:該引數指定了輸出視頻每幀影像的大小,本例子中該值來自于原始視頻幀的大小,
isColor:如果非零,編碼器將希望得到彩色幀并進行編碼;否則,是灰度幀(只有在Windows下支持),
- Python實作
Python利用OpenCV實作視頻的讀取及保存,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347228.html
標籤:其他
