一. 概敘
前文回顧,從上一篇 APEX 搭建編譯環境 的介紹。相信各位已經安裝完成 Vision SDK 以及 Visual Studio Code,並可以利用 MakeFile 來編譯原廠範例 Demo 程式。後續,將教導各位如何開始撰寫代碼與使用 APEX,在此之前必須先認識撰寫 APEX 代碼所會用到的資料型態,以及特定的轉換規則,故於此篇文章作詳細的資料型態說明。
如同下圖 “APEX 技術指南-文章架構示意圖” 所示,此次介紹章節為 “ APEX 常用資料型態 ( UMat / Mat ) “。 在文章的最後,將會以 "擷取影像中感興趣的區域" 作為範例介紹,並教導正確的資料型態轉換方式。
二. 常用的資料型態 UMat / Mat 使用方式
所謂的 Mat 就是 OpenCV 常用存放資料的型態之一,而 UMat 則是起源於 OpenCL 處理並行處理的資料型態,適合搭配硬體達到加速的效果。此外在 OpenCV 2.x 版本後,開始支援 UMat,並能夠與 Mat 自由相互轉換。因此 VSDK 也效仿 OpenCV 建立屬於 S32V 系列的資料型態 vsdk::SUMat、vsdk::SMat、vsdk::UMat 以及 vsdk::UMat,以下說明 :
1. 類型說明 :
2. 轉換說明 :
主要三種類型之 UMat / Mat 轉換,如下圖所示 cv::UMat 與 vsdk::UMat 可直接以等號方式互換,同理 cv::Mat 與 vsdk::Mat 亦可直接以等號方式互換型態。這裡, 必須注意的是 vsdk::SUMat 並不能直接與 cv::UMat 進行轉換,必須透過 vsdk::UMat 才可。
UMat 與 Mat 的轉換皆使用 opencv進行轉換,如下圖方式進行轉換。
若要轉換 vsdk 的 UMat 成 Mat 則需先轉成 cv的型態,如以下方式 :
將 UMat to Mat 的方式 :
將 Mat to UMat 的方式 :
3. 使用感興趣區域 (ROI) 範例說明:
在影像處理中,擷取某一個欲處理或只作處理的區域,此作法稱為感興趣區域(ROI)。此小節利用此範例來實際演示資料型態的 UMat 與 Mat 的轉換 !!
Step 1 : 使用感興趣區域的宣告方式
宣告矩陣 UMatROI : 為欲宣告的矩陣變數名稱。
輸入矩陣 UMatSRC : 為來源矩陣。
輸入變數 x: 為欲擷取的某一點座標之水平方向之起始位置。
輸入變數 y: 為欲擷取的某一點座標之垂直方向之起始位置。
輸入變數 w: 為欲擷取的區域寬度。
輸入變數 h: 為欲擷取的區域高度。
Step 2 : 代碼介紹
輸入一張彩色影像並擷取感興趣的區域
Step 3 : 執行結果
利用上一篇所介紹的編譯方法與更改 BUILK 的方式,即可編譯成功上述代碼產生出執行檔,執行結果如下. . .
這就有點類似裁剪的概念,將影像中感興趣的部分提取出來 !! 同時也示範 UMat 與 Mat 的資料型態轉換 !!
三. 參考文件
[1] NXP Official website : https://www.nxp.com/
[2] VisionSDK_ProgrammingExamples.pdf
[3] VisionSDK_UserGuide.pdf
[4] VisionSDK_SUMat_UMat.pdf
如有任何相關 APEX 技術問題,歡迎至博文底下留言提問 !!
接下來還會分享更多 APEX 的技術文章 !!敬請期待 【 ATU Book-S32V系列 】 !!
評論