建置支援 Windows ARM64 的 OpenCV
Posted on Fri 26 January 2024 in Computer Vision
背景
OpenCV 是一個知名的開源電腦視覺函示庫,包含超過 2500 種的演算法。由於 OpenCV 官方提供的預建置二進位檔案沒有包含 Windows ARM64,所以只好嘗試從原始碼建置支援 ARM64 的二進位檔案。
事先準備
- 一台支援 Windows 11 ARM64 的電腦。
- 安裝 Visual Studio 2022 (VS) 或更新的版本
- 安裝 CMake,也可使用
winget
安裝:winget install Kitware.CMake
。 - 下載並解壓縮 OpenCV,可下載包含 Windows x64 預建置二進位檔案的版本。
- 下載並解壓縮額外模組( 可選 )
建置 OpenCV
- 首先要用 CMake 產生用來建置 OpenCV 的 VS 方案,打開
CMake (cmake-gui)
設定原始碼的路徑 (ex.C:/opencv/sources
) 與建置用的資料夾路徑 (ex.C:/opencv/builds
)。 - 點選
Configure
,設定編譯器與目標平台,這裡選擇ARM64
。
-
接著要調整 CMake 的設定,用來產生合適的 VS 方案來建置 OpenCV,這裡紀錄有修改的非預設設定
Name Value BUILD_opencv_world ON CV_ENABLE_INTRINSICS OFF CPU_BASELINE NEON BUILD_opencv_world
設定為ON
會將多個模組合併成一個單一檔案,讓之後用起來方便。 取消CV_ENABLE_INTRINSICS
是為了通過建置。CPU_BASELINE
是最低的指令集規格,預設多了一項FP16
,會導致相容性問題,故刪除。 若要加入額外模組,則需要將額外模組所在的路徑加入設定,如Name Value OPENCV_EXTRA_MODULES_PATH C:/opencv/opencv_contrib-4.x/modules 其餘的設定選項可以參考官網。
-
調整完設定後點選
Configure
直到紅底都消失,再點選Generate
產生 VS 方案。
- 打開產生出來的
OpenCV.sln
方案,點選CMakeTargets/INSTALL
專案,滑鼠右鍵選單選擇Build
,開始建置 OpenCV,接下來可以去喝杯咖啡等待建置完成。
- 建置完成後,二進位檔案會在建置資料夾中的
install/
資料夾內,所含內容相當於下載來的預建置檔案,最好將其複製到一個單純的路徑,如C:\opencv\build_ARM64\
,以利使用。
測試 OpenCV
為了測試建置好的檔案,創建一個簡單的 C++ 控制台應用程式。
- 建立專案後,在專案的屬性設定頁中在 C/C++/General
的頁面增加額外的 Include 路徑,如 C:\opencv\build_ARM64\include
。
- 在 Linker\General
頁面當中的 Additional Library Directories
加入額外函式庫的路徑,如 C:\opencv\build_ARM64\ARM64\vc17\lib
。
- 在 Linker\Input
頁面當中的 Additional Dependencies
加入額外的相依性,如 opencv_world490.lib
。
這裡使官方的範例來測試,用 OpenCV 讀取並顯示一張影像,程式碼:
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
Mat image;
image = imread("C:\\Path\\to\\image.jpg", IMREAD_COLOR );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
建置並執行後,成功的顯示指定的影像。
心得
建置的過程遇到的坑比想像中的少,實際要改的設定不多。 目前雖然成功的建置原生支援 Windows ARM64 的 OpenCV,但是其他模組會不會有問題還需要近一步的測試。