基於 Xcode 搭建 OpenCV 開發環境

CharmingZh發表於2022-04-28

如何基於Xcode搭建OpenCV開發環境

我的開發平臺是MacBook Pro (13-inch, M1, 2020),版本11.4,碩士課題是關於計算機視覺的,平時主要用Clion/PyCharm基於opencv-python/C++進行開發。近期閒來沒事體驗一下蘋果官方的開發工具,由於遇到了一些坑,網上的資料也不是很多,因此決定記錄一下配置過程。

相應工具的安裝

Xcode-13

有兩種安裝方法:

  1. (推薦)在App Store中安裝Xcode,直接安裝就行,省心省事;
  2. 登入Apple Id開發者賬號,在官方網站進行下載,注意系統版本要對應支援的版本;

Homebrew

HomebrewMac上的包管理工具,可以複製以下程式碼,直接在終端中安裝。

/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
image-20220428144209309

pkg-config

pkg-config是在編譯應用程式和庫時使用的輔助工具,可以幫助我們找到找到正確的OpenCV 連結器符號 (Linker Flags) ,在後續的步驟中會用到。 安裝pkg-config,也只需要在終端輸入以下命令

brew install pkg-config

配置Xcode

6.建立Xcode專案

在配置OpenCV環境之前,我們首先要新建一個C++專案,如圖所示,選擇macOS -> Command Line Tool

image-20220428144440033

並在下一步中的程式語言中選擇:C++

image-20220428144456538

使用pkg-config檢視OpenCV的編譯依賴

檢視您的opencv.pc檔案所在位置,一般opencv.pc檔案所在位置為

/opt/homebrew/Cellar/opencv/<版本號>/lib/pkgconfig/

如筆者的版本為4.5.3_2opencv.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
image-20220428150736979

設定 Library Search Paths

類似地,在 Build Settings 中搜尋Library Search Paths,將 Library Search Paths路徑設定為剛才得到的輸出結果“-L”之後的路徑,如我需要對如下路徑進行新增。注意,請將Lib目錄手動拖動到最上頭

/opt/homebrew/opt/opencv/lib
image-20220428150750424

設定Linker Flags

將上述pkg-config --cflags --libs .../opencv4.pc匯出的一長串資訊全部複製下來,新增到如下所示的框框裡。

image-20220428150519963

測試

配置到這一步 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;
}

執行結果展示:

image-20220428151225907

其它設定

使用相對路徑

image-20220428151455058

Xcode使用影像或資源的絕對路徑。為了設定相對路徑需要設定Working Directory。依次點選

(選單欄) Product > Scheme > Edit Scheme 
			|->	Run -> option -> ✅ Use Custom Working Directory

然後自定義專案目錄。

image-20220428151550616

常見錯誤

Not a Doxygen trailing comment

image-20220428151644355

Build Settings 中搜尋 “Documentation Comments”,將 Documentation Comments 設定為 No即可解決該問題。Doxygen 只是一種格式可以選擇跳過檢查。

相關文章