OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
OpenCV 影片 I/O 概述

另請參見

常規資訊

OpenCV 影片 I/O 模組是一組用於讀取和寫入影片或影像序列的類和函式。

基本上,該模組提供 cv::VideoCapturecv::VideoWriter 類作為到許多影片 I/O API 的雙層介面,這些 API 用作後端。

使用 OpenCV 進行影片 I/O

某些後端,例如 Direct Show (DSHOW)、Microsoft Media Foundation (MSMF)、Video 4 Linux (V4L) 等,是作業系統提供的影片 I/O 庫的介面。

其他一些後端,例如 Kinect 的 OpenNI2、Intel Perceptual Computing SDK、GStreamer、XIMEA Camera API 等,是專有驅動程式或外部庫的介面。

請在此處檢視支援的後端列表:cv::VideoCaptureAPIs

警告
某些後端是實驗性的,請您自行承擔風險使用
注意
每個後端以不同的方式支援裝置屬性 (cv::VideoCaptureProperties),或者可能根本不支援任何屬性。

在執行時選擇後端

OpenCV 會自動選擇並使用第一個可用的後端 (apiPreference=cv::CAP_ANY)。

作為高階用法,您可以選擇在執行時使用的後端。

例如,使用 Microsoft Media Foundation (MSMF) 作為後端從預設相機抓取

// 宣告一個捕獲物件
// 或者使用 open 指定 apiPreference
cap.open(0, cv::CAP_MSMF);
用於從影片檔案、影像序列或相機捕獲影片的類。
Definition videoio.hpp:772
@ CAP_MSMF
Microsoft Media Foundation(透過 videoInput)。請參閱上面的平臺特定說明。
定義 videoio.hpp:115

如果要使用 Microsoft Media Foundation (MSMF) 作為後端從檔案抓取

// 宣告一個捕獲物件
// 或者使用 open 指定 apiPreference
cap.open(filename, cv::CAP_MSMF);
另請參見
cv::VideoCapture::open() , cv::VideoCapture::VideoCapture()

如何啟用後端

有兩種影片 I/O 後端:內建後端和外掛,它們將在執行時載入(自 OpenCV 4.1.0 起)。使用函式 cv::videoio_registry::getBackendscv::videoio_registry::hasBackendcv::videoio_registry::getBackendName 以檢查執行時後端的實際存在情況。

要啟用內建影片 I/O 後端

  1. 啟用相應的 CMake 選項,例如 -DWITH_GSTREAMER=ON
  2. 重新構建 OpenCV

要啟用動態載入的影片 I/O 後端(目前支援:Linux 上的 GStreamer 和 FFmpeg,Linux 和 Windows 上的 MediaSDK)

  1. 啟用後端並將其新增到外掛列表:-DWITH_GSTREAMER=ON -DVIDEOIO_PLUGIN_LIST=gstreamer CMake 選項
  2. 重新構建 OpenCV
  3. 檢查 libopencv_videoio_gstreamer.so 庫是否存在於 lib 目錄中
注意
在這些兩種模式之間切換時,不要忘記清除 CMake 快取

使用第三方驅動程式或相機

許多工業相機或某些影片 I/O 裝置沒有為作業系統提供標準的驅動程式介面。因此,您無法將 VideoCapture 或 VideoWriter 與這些裝置一起使用。

為了訪問它們的裝置,製造商提供了他們自己的 C++ API 和庫,您必須將其包含並連結到您的 OpenCV 應用程式。

常見的情況是,這些庫從/向記憶體緩衝區讀取/寫入影像。如果是這樣,可以為記憶體緩衝區(使用者分配的資料)建立一個 Mat 標頭,並使用 OpenCV 函式就地處理它。有關更多詳細資訊,請參閱 cv::Mat::Mat()

FFmpeg 庫

OpenCV 可以使用 FFmpeg 庫 (http://ffmpeg.org/) 作為後端來錄製、轉換和流式傳輸音訊和影片。FFmpeg 是一個完整的跨引用解決方案。如果您在配置 OpenCV 時啟用了 FFmpeg,則 CMake 會將二進位制檔案下載並安裝到 OPENCV_SOURCE_CODE/3rdparty/ffmpeg/ 中。要在執行時使用 FFmpeg,您必須將 FFmpeg 二進位制檔案與您的應用程式一起部署。

注意
FFmpeg 已獲得 GNU Lesser General Public License (LGPL) 2.1 版或更高版本的許可。有關詳細資訊和許可資訊,請參閱 OPENCV_SOURCE_CODE/3rdparty/ffmpeg/readme.txthttp://ffmpeg.org/legal.html