如何基於Xcode
搭建OpenCV
開發環境
我的開發平臺是MacBook Pro (13-inch, M1, 2020)
,版本11.4
,碩士課題是關於計算機視覺的,平時主要用Clion/PyCharm
基於opencv-python/C++
進行開發。近期閒來沒事體驗一下蘋果官方的開發工具,由於遇到了一些坑,網上的資料也不是很多,因此決定記錄一下配置過程。
相應工具的安裝
Xcode-13
有兩種安裝方法:
- (推薦)在
App Store
中安裝Xcode
,直接安裝就行,省心省事; - 登入
Apple Id
開發者賬號,在官方網站進行下載,注意系統版本要對應支援的版本;
Homebrew
Homebrew是Mac
上的包管理工具,可以複製以下程式碼,直接在終端中安裝。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
OpenCV
完成了Homebrew
的安裝,只需要通過brew
命令即可安裝openCV
,由於自己編譯OpenCV
可能會出現很多問題,因此推薦通過用這種方法來安裝。
brew install opencv
安裝完成後,要記錄一下你的OpenCV
安裝路徑,如下圖所示,我的OpenCV
的安裝路徑是:
/opt/homebrew/Cellar/opencv/4.5.3_2
pkg-config
pkg-config
是在編譯應用程式和庫時使用的輔助工具,可以幫助我們找到找到正確的OpenCV
連結器符號 (Linker Flags) ,在後續的步驟中會用到。 安裝pkg-config
,也只需要在終端輸入以下命令
brew install pkg-config
配置Xcode
6.建立Xcode專案
在配置OpenCV
環境之前,我們首先要新建一個C++
專案,如圖所示,選擇macOS -> Command Line Tool。
並在下一步中的程式語言中選擇:C++
。
使用pkg-config
檢視OpenCV
的編譯依賴
檢視您的opencv.pc
檔案所在位置,一般opencv.pc
檔案所在位置為
/opt/homebrew/Cellar/opencv/<版本號>/lib/pkgconfig/
如筆者的版本為4.5.3_2
,opencv.pc
現已改為opencv4.pc
(不同電腦可能有所不同,讀者可以cd
到相應檔案目錄檢視具體資訊)
/opt/homebrew/Cellar/opencv/4.5.3_2/lib/pkgconfig/opencv4.pc
使用下面的命令檢視OpenCV
的連結器符號 (Linker Flags) ,筆者的程式碼為
pkg-config --cflags --libs /opt/homebrew/Cellar/opencv/4.5.3_2/lib/pkgconfig/opencv4.pc
你會得到類似於如下的輸出結果,我們需要參照輸出結果在 Xcode 中進行配置
-I/opt/homebrew/opt/opencv/include/opencv4 -L/opt/homebrew/opt/opencv/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -
...(後續省略)
設定Header Search Paths
在 Xcode 中設定 Header Search Paths
,先單擊 Xcode 專案,然後點選 Build Settings
,然後搜尋Header Search Paths
。將 Header Search Paths
路徑設定為剛才得到的輸出結果“-I
”之後的路徑,如我需要對如下路徑進行新增。
/opt/homebrew/opt/opencv/include/opencv4
設定 Library Search Paths
類似地,在 Build Settings
中搜尋Library Search Paths
,將 Library Search Paths
路徑設定為剛才得到的輸出結果“-L
”之後的路徑,如我需要對如下路徑進行新增。注意,請將Lib
目錄手動拖動到最上頭
/opt/homebrew/opt/opencv/lib
設定Linker Flags
將上述pkg-config --cflags --libs .../opencv4.pc
匯出的一長串資訊全部複製下來,新增到如下所示的框框裡。
測試
配置到這一步 Xcode 相關內容已經結束。可以嘗試執行簡單的OpenCV程式判斷是否能夠正常執行,以下給出簡單的示例程式,功能僅為開啟圖片與退出。
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <unistd.h>
using namespace cv;
using namespace std;
int main( int argc, char** argv ) {
printf("Hello, world!"); // 手工斷點/doge
char buf[200];
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf); // 測試當前工作目錄
Mat image;
image = imread("test.png", IMREAD_COLOR); // 注意圖片的路徑
if(! image.data ) { // 養成良好工作習慣
cout << "Could not open or find the image" << std::endl;
return -1;
}
imshow( "Display window", image);
waitKey(0);
return 0;
}
執行結果展示:
其它設定
使用相對路徑
Xcode使用影像或資源的絕對路徑。為了設定相對路徑需要設定Working Directory
。依次點選
(選單欄) Product > Scheme > Edit Scheme
|-> Run -> option -> ✅ Use Custom Working Directory
然後自定義專案目錄。
常見錯誤
Not a Doxygen trailing comment
在Build Settings
中搜尋 “Documentation Comments
”,將 Documentation Comments
設定為 No
即可解決該問題。Doxygen 只是一種格式可以選擇跳過檢查。