如何在 iOS 工程中使用 OpenCV?

2021-09-20 03:29:20 字數 2507 閱讀 5617

opencv ,是乙個開源的跨平台計算機視覺和機器學習庫,通俗點的說,就是他給計算機提供了一雙眼睛,一雙可以從中獲取資訊的眼鏡,從而完**臉識別、去紅眼、追蹤移動物體等等的影象相關的功能。更多具體的說明可參見 opencv 官網。

#import
或者直接在 pch 檔案中新增:

#ifdef __cplusplus

#import #endif

首先說明,為何在 pch 檔案中引入 opencv 的標頭檔案我們需要多加#ifdef __cpluseplus這一部分呢?這是因為 pch 檔案是乙個會被所有的檔案引入的標頭檔案,而我們又希望#import這部分只會被一些 c++實現檔案編譯,所以我們加上#ifdef __cpluseplus來表示這是 c++ 檔案才會編譯的,除了#ifdef __cpluseplus,還有#ifdef __objc__這樣的巨集來說明編譯規則(按照 oc 檔案編譯),這樣的巨集多出現於一些會被多種型別的實現檔案引用的標頭檔案中。

另外注意另乙個問題:如果乙個標頭檔案是c++型別的標頭檔案,那麼一定要保證所有直接或者間接引用這個標頭檔案的實現檔案都要為.mm或者.cpp,否則 xcode 就不會把這個標頭檔案當做 c++標頭檔案來編譯,就會出現最基本的#include這種引用都會報出file not found這樣的編譯錯誤的問題。我在編譯的過程中,某個c++標頭檔案 a.h 被 b.h 引用,然後 b.h 又被 c.m 引用,雖然 b 的實現檔案是 b.mm ,但是仍然報出了之前說的那個錯誤, 感謝 stackoberflow 讓我找到了問題發生的原因。所以對於 c++ 標頭檔案的引用一定要注意,但凡是引用了 a.h 的實現部分,都必須是.mm或者.cpp字尾名。(同時我們也可以知道,xcode 是根據標頭檔案被引用的情況來判定標頭檔案的編譯 型別的)。

在 opencv 中同常用 cv::mat 表示,而 ios 中則是 uiimage 來表示,因此我們就需要一些轉換的方法,opencv 的官方教程中給吃了轉換的方法,這裡摘錄如下:

uiimage to cv::mat:

- (cv::mat)cvmatfromuiimage:(uiimage *)image

cv::mat to uiimage:

-(uiimage *)uiimagefromcvmat:(cv::mat)cvmat

else

cgdataproviderref provider = cgdataprovidercreatewithcfdata((__bridge cfdataref)data);

// creating cgimage from cv::mat

cgimageref imageref = cgimagecreate(cvmat.cols, //width

cvmat.rows, //height

8, //bits per component

8 * cvmat.elemsize(), //bits per pixel

cvmat.step[0], //bytesperrow

colorspace, //colorspace

kcgimagealphanone|kcgbitmapbyteorderdefault,// bitmap info

provider, //cgdataproviderref

null, //decode

false, //should interpolate

kcgrenderingintentdefault //intent

);// getting uiimage from cgimage

uiimage *finalimage = [uiimage imagewithcgimage:imageref];

cgimagerelease(imageref);

cgdataproviderrelease(provider);

cgcolorspacerelease(colorspace);

return finalimage;

}

如何在AndroidStudio中使用AIDL

本章節介紹如何在androidstudio中使用aidl 2.在aidl下建立乙個包,包裡建立乙個 aidl檔案,右鍵aidl new aidl aidl file 紅框就是建立完成後的樣子 3.在aidl檔案寫要被呼叫的方法,此方法不能有許可權修飾符 4.首先build下,然後建立乙個servic...

如何在自己工程專案中使用TouchJSON框架

前提 配置到某具體的工程專案中 複製touchjson框架源 到自己的工程專案中,即將touchjson source目錄及檔案拷貝到專案中,在新增到工程專案中時確認選中 copy items into destination groups folder if needed 項。轉換json資料到物...

ios工程中使用ARC技術

自動計數 arc 是乙個編譯期間工作的能夠幫你管理記憶體的技術,通過它,程式人員可以不需要在記憶體的retain,釋放等方面花費精力。arc在編譯期間為每個objective c指標變數新增合適的retain,release,autorelease等函式,儲存每個變數的生存週期控制在合理的範圍內,以...