本文為 ZED 景深攝影機原廠範例,共有八個範例,請根據 ZED 的範例程式頁面,取得 C++ / Python 兩種語言的範例原始碼。說明如下:
- Hello ZED: 入門範例,說明如何連接 ZED 攝影機,並於終端機中顯示裝置序列編號。
- Image Capture: 開啟 ZED 攝影機,取得影像,並於終端機中顯示時間戳記、影像尺寸。
- Depth Perception: 取得畫面的深度資料與點雲,並於終端機中顯示指定點的距離。
- Camera Tracking: 啟用位置追蹤,可即時更新攝影機的位置與指向。
- Spatial Mapping: 啟用地圖繪製,可擷取環境的網格或融合點雲。
- 3D Object Detection: 偵測畫面中的物體,並進行 3D 定位 (只適用於 ZED 2 機型)。
- Using Sensors: 取得攝影機的 IMU、氣壓計與磁力感測器資料。
範例02 – Image Capture
本範例將說明如何截取ZED攝影機左側鏡頭的影像,並將影像之時間戳記與尺寸顯示於終端機中,程式會不斷執行直到成功截取50張影像為止。我們假設您已經順利完成上一個 Hello ZED 範例。
前置作業
- 下載最新版的 ZED SDK (請點我)
- 下載 Image Capture 範例程式,提供 C++, Python 與 C# 等版本
- 在 Windows 或 Linux OS上,建置 C++ 環境(請點我) 或執行 Python 範例,本系列文章將使用 Python (教學請點我)
範例總覽
開啟攝影機
如上一個 Hello ZED範例,在此會建立、設定並開啟ZED攝影機,我們會把它的解析度設定為 dual HD 1080,30 fps。
取得影像資料
ZED 攝影機開啟之後,就可以擷取來自攝影機的即時串流影像了,在此建立一個迴圈來擷取50張影像,完成之後退出。
在此會呼叫 zed.grab
函式來擷取單張影像並處理。本函式也可接受執行階段參數,但本範例為求簡便採用預設設定。
如果回傳結果為 SUCCESS
代表成功擷取一張新的影像並已可用,您也可檢視 grab()
狀態來得知擷取影像過程中是否發生錯誤。
擷取完成之後,就可以取得新的影像與其後設資料(metadata),本範例會使用retrieveImage()
與 getTimestamp()
語法來取得左側鏡頭影像與其時間戳記。
retrieveImage()
會接受 image = sl.Mat()
以及 VIEW
模式作為參數。建立 Mat
, 還不需要分配記憶體。首次呼叫retrieveImage()
時,sl.Mat()
會被填入影像資料且自動分配記憶體。
注意:影像的時間戳記單位為奈秒,且為 Epoch 格式。比較兩次 zed.grab
函式之間的時間戳記,應該相當接近幀率 (前提是未掉幀)。
更多關於攝影機與影片參數請參考原廠文件 Using the Video API.
關閉攝影機
擷取50張影像之後,關閉攝影機並退出程式。
更多範例
想學習曝光、增益、對比與銳利度這類相機設定,並顯示於結果影像的話,請參考 Camera Control 範例。
下一步
您現在已經知道如何開啟/存取/設定攝影機了,也知道如何取得單張影像與其後設資料。
下一個範例要說明如何從 ZED 攝影機取得深度地圖。
註:本文經授權之後翻譯自 https://www.stereolabs.com/docs/tutorials/image-capture/