本發(fā)明涉及互聯(lián)網(wǎng)移動(dòng)端應(yīng)用開發(fā)領(lǐng)域,具體是涉及一種蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的方法及系統(tǒng)。
背景技術(shù):
在移動(dòng)端的app(application,應(yīng)用)中,很多時(shí)候需要用到圖像識(shí)別,例如人臉識(shí)別,面部的某一個(gè)部位的識(shí)別,在這些臉部識(shí)別的時(shí)候,可能需要調(diào)用opencv(opensourcecomputervisionlibrary,開放源代碼計(jì)算機(jī)視覺類庫(kù))的庫(kù),為了實(shí)現(xiàn)人臉識(shí)別或者其他的圖像識(shí)別,在ios(蘋果移動(dòng)設(shè)備操作系統(tǒng))開發(fā)中需要用到oc(蘋果開發(fā)語(yǔ)言)和c++混合編譯調(diào)用opencv。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了克服上述背景技術(shù)的不足,提供一種蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的方法及系統(tǒng),實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。
本發(fā)明提供一種蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的方法,包括以下步驟:
a、在蘋果電腦終端上安裝套件管理器,配置圖像處理庫(kù)環(huán)境,將c++庫(kù)中以cpp結(jié)尾的文件修改為以.mm結(jié)尾;將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像;
b、使用蘋果路徑獲取函數(shù)獲取項(xiàng)目工程文件目錄下面的可擴(kuò)展標(biāo)記語(yǔ)言xml文件的路徑,使用圖像處理庫(kù)中的圖像加載函數(shù)加載xml文件,對(duì)xml文件的路徑執(zhí)行ascii編碼,實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。
在上述技術(shù)方案的基礎(chǔ)上,步驟a中,所述將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像的過程如下:
獲取蘋果開發(fā)語(yǔ)言的參考圖像;
創(chuàng)建一個(gè)顏色空間類型的對(duì)象;
創(chuàng)建一個(gè)c++類型的圖像iplimage,記錄圖像iplimage的寬和高;
創(chuàng)建一個(gè)圖像上下文;
使用圖像上下文繪制函數(shù)處理圖像上下文;
對(duì)圖像上下文中的內(nèi)存進(jìn)行釋放;
釋放創(chuàng)建的顏色空間類型的對(duì)象;
使用圖像處理庫(kù)中的圖像創(chuàng)建函數(shù),創(chuàng)建一個(gè)c++類型的圖像對(duì)象ret;
調(diào)用圖像處理庫(kù)中的顏色處理函數(shù),對(duì)c++類型的圖像對(duì)象ret進(jìn)行處理;返回c++類型的圖像對(duì)象ret的處理結(jié)果。
在上述技術(shù)方案的基礎(chǔ)上,所述圖像上下文繪制函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是圖像上下文;第二個(gè)參數(shù)是圖像坐標(biāo)值,圖像坐標(biāo)值包含圖像iplimage的起始位置的x坐標(biāo)值、起始位置的y坐標(biāo)值、圖像iplimage的寬和高;第三個(gè)參數(shù)是蘋果開發(fā)語(yǔ)言的參考圖像。
在上述技術(shù)方案的基礎(chǔ)上,所述顏色處理函數(shù)有1個(gè)參數(shù):步驟a中創(chuàng)建的c++類型的圖像iplimage。
在上述技術(shù)方案的基礎(chǔ)上,步驟b中,所述圖像加載函數(shù)有4個(gè)參數(shù):第一個(gè)參數(shù)是xml文件的路徑,后面的三個(gè)參數(shù)都默認(rèn)為0。
本發(fā)明還提供一種蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的系統(tǒng),該系統(tǒng)包括配置單元、轉(zhuǎn)換單元、加載單元,其中:
配置單元用于:在蘋果電腦終端上安裝套件管理器,配置圖像處理庫(kù)環(huán)境,將c++庫(kù)中以cpp結(jié)尾的文件修改為以.mm結(jié)尾;
轉(zhuǎn)換單元用于:將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像;
加載單元用于:使用蘋果路徑獲取函數(shù)獲取項(xiàng)目工程文件目錄下面的可擴(kuò)展標(biāo)記語(yǔ)言xml文件的路徑,使用圖像處理庫(kù)中的圖像加載函數(shù)加載xml文件,對(duì)xml文件的路徑執(zhí)行ascii編碼,實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。
在上述技術(shù)方案的基礎(chǔ)上,所述轉(zhuǎn)換單元將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像的過程如下:
獲取蘋果開發(fā)語(yǔ)言的參考圖像;
創(chuàng)建一個(gè)顏色空間類型的對(duì)象;
創(chuàng)建一個(gè)c++類型的圖像iplimage,記錄圖像iplimage的寬和高;
創(chuàng)建一個(gè)圖像上下文;
使用圖像上下文繪制函數(shù)處理圖像上下文;
對(duì)圖像上下文中的內(nèi)存進(jìn)行釋放;
釋放創(chuàng)建的顏色空間類型的對(duì)象;
使用圖像處理庫(kù)中的圖像創(chuàng)建函數(shù),創(chuàng)建一個(gè)c++類型的圖像對(duì)象ret;
調(diào)用圖像處理庫(kù)中的顏色處理函數(shù),對(duì)c++類型的圖像對(duì)象ret進(jìn)行處理;返回c++類型的圖像對(duì)象ret的處理結(jié)果。
在上述技術(shù)方案的基礎(chǔ)上,所述圖像上下文繪制函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是圖像上下文;第二個(gè)參數(shù)是圖像坐標(biāo)值,圖像坐標(biāo)值包含圖像iplimage的起始位置的x坐標(biāo)值、起始位置的y坐標(biāo)值、圖像iplimage的寬和高;第三個(gè)參數(shù)是蘋果開發(fā)語(yǔ)言的參考圖像。
在上述技術(shù)方案的基礎(chǔ)上,所述顏色處理函數(shù)有1個(gè)參數(shù):所述轉(zhuǎn)換單元?jiǎng)?chuàng)建的c++類型的圖像iplimage。
在上述技術(shù)方案的基礎(chǔ)上,所述圖像加載函數(shù)有4個(gè)參數(shù):第一個(gè)參數(shù)是xml文件的路徑,后面的三個(gè)參數(shù)都默認(rèn)為0。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)如下:
(1)本發(fā)明在蘋果電腦終端上安裝套件管理器,配置圖像處理庫(kù)環(huán)境,將c++庫(kù)中以cpp結(jié)尾的文件修改為以.mm結(jié)尾;將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像;使用蘋果路徑獲取函數(shù)獲取項(xiàng)目工程文件目錄下面的可擴(kuò)展標(biāo)記語(yǔ)言xml文件的路徑,使用圖像處理庫(kù)中的圖像加載函數(shù)加載xml文件,對(duì)xml文件的路徑執(zhí)行ascii編碼,實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。本發(fā)明解決了oc、c++混合編譯調(diào)用opencv中的環(huán)境配置、uiimage和iplimage*類型的轉(zhuǎn)換、xml文件的加載幾個(gè)核心問題,就能夠很容易地實(shí)現(xiàn)oc,c++混合編譯調(diào)用opencv。
(2)本發(fā)明將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像,實(shí)現(xiàn)了將uiimage類型的圖像轉(zhuǎn)換為iplimage*類型的圖像,方便加載,使uiimage類型的圖像都可以被c++函數(shù)處理。
(3)本發(fā)明使用圖像上下文繪制函數(shù)cgcontextdrawimage,處理創(chuàng)建的圖像上下文,跟現(xiàn)有技術(shù)相比,本發(fā)明操作圖像上下文,更接近底層,轉(zhuǎn)換效率更高。
(4)本發(fā)明使用蘋果路徑獲取函數(shù)獲取項(xiàng)目工程文件目錄下面的可擴(kuò)展標(biāo)記語(yǔ)言xml文件的路徑,使用圖像處理庫(kù)中的圖像加載函數(shù)加載xml文件,對(duì)xml文件的路徑執(zhí)行ascii編碼,實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。本發(fā)明能夠在c++文件中加載oc工程里面的xml文件,實(shí)現(xiàn)兩者的橋接,c++文件可以很方便地加載xml文件。
附圖說明
圖1是本發(fā)明實(shí)施例中蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
參見圖1所示,本發(fā)明實(shí)施例提供一種蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的方法,包括以下步驟:
a、在蘋果電腦終端上安裝套件管理器,配置圖像處理庫(kù)環(huán)境,將c++庫(kù)中以cpp結(jié)尾的文件修改為以.mm結(jié)尾;將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像;
b、使用蘋果路徑獲取函數(shù)獲取項(xiàng)目工程文件目錄下面的可擴(kuò)展標(biāo)記語(yǔ)言xml文件的路徑,使用圖像處理庫(kù)中的圖像加載函數(shù)加載xml文件,對(duì)xml文件的路徑執(zhí)行ascii編碼,實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。圖像加載函數(shù)有4個(gè)參數(shù):第一個(gè)參數(shù)是xml文件的路徑,后面的三個(gè)參數(shù)都默認(rèn)為0。
步驟a中,將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像的過程如下:
獲取蘋果開發(fā)語(yǔ)言的參考圖像;
創(chuàng)建一個(gè)顏色空間類型的對(duì)象;
創(chuàng)建一個(gè)c++類型的圖像iplimage,記錄圖像iplimage的寬和高;
創(chuàng)建一個(gè)圖像上下文;
使用圖像上下文繪制函數(shù)處理圖像上下文;圖像上下文繪制函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是圖像上下文;第二個(gè)參數(shù)是圖像坐標(biāo)值,圖像坐標(biāo)值包含圖像iplimage的起始位置的x坐標(biāo)值、起始位置的y坐標(biāo)值、圖像iplimage的寬和高;第三個(gè)參數(shù)是蘋果開發(fā)語(yǔ)言的參考圖像;
對(duì)圖像上下文中的內(nèi)存進(jìn)行釋放;
釋放創(chuàng)建的顏色空間類型的對(duì)象;
使用圖像處理庫(kù)中的圖像創(chuàng)建函數(shù),創(chuàng)建一個(gè)c++類型的圖像對(duì)象ret;
調(diào)用圖像處理庫(kù)中的顏色處理函數(shù),對(duì)c++類型的圖像對(duì)象ret進(jìn)行處理;返回c++類型的圖像對(duì)象ret的處理結(jié)果。顏色處理函數(shù)有1個(gè)參數(shù):步驟a中創(chuàng)建的c++類型的圖像iplimage。
本發(fā)明還提供一種蘋果開發(fā)語(yǔ)言、c++混合編譯調(diào)用opencv的系統(tǒng),該系統(tǒng)包括配置單元、轉(zhuǎn)換單元、加載單元,其中:
配置單元用于:在蘋果電腦終端上安裝套件管理器,配置圖像處理庫(kù)環(huán)境,將c++庫(kù)中以cpp結(jié)尾的文件修改為以.mm結(jié)尾;
轉(zhuǎn)換單元用于:將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像;
加載單元用于:使用蘋果路徑獲取函數(shù)獲取項(xiàng)目工程文件目錄下面的可擴(kuò)展標(biāo)記語(yǔ)言xml文件的路徑,使用圖像處理庫(kù)中的圖像加載函數(shù)加載xml文件,對(duì)xml文件的路徑執(zhí)行ascii編碼,實(shí)現(xiàn)蘋果開發(fā)語(yǔ)言oc、c++混合編譯調(diào)用opencv。圖像加載函數(shù)有4個(gè)參數(shù):第一個(gè)參數(shù)是xml文件的路徑,后面的三個(gè)參數(shù)都默認(rèn)為0。
轉(zhuǎn)換單元將蘋果開發(fā)語(yǔ)言oc類型的圖像轉(zhuǎn)換為c++類型的圖像的過程如下:
獲取蘋果開發(fā)語(yǔ)言的參考圖像;
創(chuàng)建一個(gè)顏色空間類型的對(duì)象;
創(chuàng)建一個(gè)c++類型的圖像iplimage,記錄圖像iplimage的寬和高;
創(chuàng)建一個(gè)圖像上下文;
使用圖像上下文繪制函數(shù)處理圖像上下文;圖像上下文繪制函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是圖像上下文;第二個(gè)參數(shù)是圖像坐標(biāo)值,圖像坐標(biāo)值包含圖像iplimage的起始位置的x坐標(biāo)值、起始位置的y坐標(biāo)值、圖像iplimage的寬和高;第三個(gè)參數(shù)是蘋果開發(fā)語(yǔ)言的參考圖像;
對(duì)圖像上下文中的內(nèi)存進(jìn)行釋放;
釋放創(chuàng)建的顏色空間類型的對(duì)象;
使用圖像處理庫(kù)中的圖像創(chuàng)建函數(shù),創(chuàng)建一個(gè)c++類型的圖像對(duì)象ret;
調(diào)用圖像處理庫(kù)中的顏色處理函數(shù),對(duì)c++類型的圖像對(duì)象ret進(jìn)行處理;返回c++類型的圖像對(duì)象ret的處理結(jié)果。顏色處理函數(shù)有1個(gè)參數(shù):所述轉(zhuǎn)換單元?jiǎng)?chuàng)建的c++類型的圖像iplimage。
下面通過具體函數(shù)來(lái)進(jìn)行說明。
一、配置opencv
在oc中調(diào)用opencv的庫(kù),需要對(duì)opencv的調(diào)用環(huán)境進(jìn)行配置。
(1)在蘋果電腦mac終端上安裝套件管理器;
(2)安裝wget,wget是一個(gè)從網(wǎng)絡(luò)上自動(dòng)下載文件的自由工具,支持通過http、https、ftp三個(gè)最常見的tcp/ip協(xié)議下載;
(3)安裝cmake,cmake是一個(gè)跨平臺(tái)的安裝(編譯)工具,可以用簡(jiǎn)單的語(yǔ)句來(lái)描述所有平臺(tái)的安裝(編譯過程);
(4)讓brew下載opencv。
經(jīng)過上述步驟,opencv的環(huán)境就配置好了,即完成了配置圖像處理庫(kù)環(huán)境。
步驟一的優(yōu)點(diǎn):本步驟完成了使用opencv的前期的環(huán)境配置準(zhǔn)備工作。
二、將c++庫(kù)中以cpp結(jié)尾的文件修改為以.mm結(jié)尾。
三、c++編譯環(huán)境和蘋果開發(fā)語(yǔ)言oc環(huán)境之間的圖像差異轉(zhuǎn)換:
c++處理的是c++類型iplimage*的圖像,但是,蘋果開發(fā)語(yǔ)言oc從相機(jī)和相冊(cè)獲取的是蘋果開發(fā)語(yǔ)言類型uiimage的圖像,兩者的圖像類型不一致,因此,需要將蘋果開發(fā)語(yǔ)言類型uiimage的圖像轉(zhuǎn)換為c++類型iplimage*的圖像。
轉(zhuǎn)換函數(shù)是+(iplimage*)converttoiplimage:(uiimage*)image,該函數(shù)的編寫過程如下:
(1)獲取到這個(gè)函數(shù)傳入的蘋果開發(fā)語(yǔ)言的圖像image,圖像image的屬性為參考圖像imageref,imageref的類型為cgimageref;
(2)使用函數(shù)語(yǔ)句cgcolorspacecreatedevicergb(),創(chuàng)建一個(gè)顏色空間類型cgcolorspaceref的對(duì)象colorspace;
(3)使用函數(shù)cvcreateimage(cvsize(image.size.width,image.size.height),ipl_depth_8u,4),創(chuàng)建一個(gè)c++類型iplimage*的圖像iplimage,創(chuàng)建圖像的過程中需要記錄cvcreateimage的第一個(gè)參數(shù)是:圖像iplimage的寬image.size.width和高image.size.height,后面需要傳入的兩個(gè)參數(shù)是ipl_depth_8u和4;
(4)使用函數(shù)cgbitmapcontextcreate(),創(chuàng)建一個(gè)cgcontextref類型的圖像上下文contextref;
(5)使用圖像上下文繪制函數(shù)cgcontextdrawimage,處理步驟(4)中創(chuàng)建的圖像上下文contextref;
圖像上下文繪制函數(shù)cgcontextdrawimage有3個(gè)參數(shù):
第一個(gè)參數(shù)是:圖像上下文contextref;
第二個(gè)參數(shù)是:cgrectmake類型的圖像坐標(biāo)值,cgrectmake類型的圖像坐標(biāo)值包含圖像iplimage的起始位置的x坐標(biāo)值,起始位置的y坐標(biāo)值,圖像iplimage的寬和高;
第三個(gè)參數(shù)是:步驟(1)中的參考圖像imageref;
(6)對(duì)圖像上下文中的內(nèi)存進(jìn)行釋放:使用函數(shù)cgcontextrelease,圖像上下文釋放contextref的內(nèi)存;
(7)使用函數(shù)cgcolorspacerelease,釋放步驟(2)中創(chuàng)建的顏色空間類型的對(duì)象colorspace;
(8)使用圖像處理庫(kù)中的圖像創(chuàng)建函數(shù)cvcreateimage,創(chuàng)建一個(gè)c++類型iplimage*的圖像對(duì)象ret;
(9)調(diào)用圖像處理庫(kù)中的顏色處理函數(shù)cvcvtcolor,對(duì)c++類型的圖像對(duì)象ret進(jìn)行處理;
cvcvtcolor函數(shù)有2個(gè)參數(shù):
第一個(gè)參數(shù)是:步驟(3)中創(chuàng)建的c++類型iplimage*的圖像iplimage;
第二個(gè)參數(shù)是:步驟(8)中創(chuàng)建的c++類型iplimage*的圖像對(duì)象ret;
(10)返回步驟(9)中c++類型iplimage*的圖像對(duì)象ret的處理結(jié)果,這個(gè)ret就是裝換后的c++類型iplimage*的對(duì)象,是c++可以處理的類型的對(duì)象。
步驟三的優(yōu)點(diǎn):實(shí)現(xiàn)了將uiimage類型的圖像轉(zhuǎn)換為iplimage*類型的圖像,方便加載,使uiimage類型的圖像都可以被c++函數(shù)處理。跟現(xiàn)有技術(shù)比:步驟(5)中操作圖像上下文,更接近底層,轉(zhuǎn)換效率更高。
四、xml加載
c++加載xml(extensiblemarkuplanguage,可擴(kuò)展標(biāo)記語(yǔ)言)的方法和oc語(yǔ)言加載xml的方法是不一樣,在oc中不能使用c++的方法加載xml,在oc中使用下述方法加載xml文件:
(1)使用蘋果路徑獲取函數(shù)pathforresource獲取到項(xiàng)目工程文件目錄下面的xml文件的路徑path;
(2)使用圖像處理庫(kù)中的圖像加載函數(shù)cvload加載xml,對(duì)xml文件的路徑path執(zhí)行ascii編碼:nsasciistringencoding編碼,nsasciistringencoding編碼可以有效處理路徑中的char*轉(zhuǎn)換為nsstring型,方便oc讀取這個(gè)路徑的文件。
圖像加載函數(shù)cvload有4個(gè)參數(shù):第一個(gè)參數(shù)是步驟(1)中xml文件的路徑path,后面的三個(gè)參數(shù)使用默認(rèn)的,都傳入0,這樣就可以加載xml。
步驟四的優(yōu)點(diǎn):能夠在c++文件中加載oc工程里面的xml文件,實(shí)現(xiàn)兩者的橋接,c++文件中可以很方便地加載xml文件。
經(jīng)過上述步驟的處理,解決了oc、c++混合編譯調(diào)用opencv中的環(huán)境配置、uiimage和iplimage*類型的轉(zhuǎn)換、xml文件的加載幾個(gè)核心問題,就能夠很容易地實(shí)現(xiàn)oc,c++混合編譯調(diào)用opencv。
本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明實(shí)施例進(jìn)行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護(hù)范圍之內(nèi)。
說明書中未詳細(xì)描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。