一種基于Android系統(tǒng)的圖片處理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Android系統(tǒng)的圖片處理技術(shù)領(lǐng)域,尤其涉及的是一種基于Android系統(tǒng)的圖片處理方法及系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)有的Android系統(tǒng)上直接對(duì)圖像進(jìn)行處理的方式主要是基于JAVA (—種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言)語(yǔ)言、使用Canvas (HTML5的canvas元素使用JavaScript在網(wǎng)頁(yè)上繪制圖像)或者Bitmap等工具進(jìn)行處理。位圖對(duì)象即Bitmap,它將圖像定義為由點(diǎn)(像素)組成,每個(gè)點(diǎn)可以由多種色彩表示,包括2、4、8、16、24和32位色彩,例如,一幅1024X768分辨率的32位真彩圖片,其所占存儲(chǔ)字節(jié)數(shù)為:1024X768X32/8=3072KB。位圖對(duì)象圖像效果好,但是非壓縮格式的,需要占用較大存儲(chǔ)空間。在Android系統(tǒng),通過(guò)Canvas或Bitmap等方式可以達(dá)到基本的圖像處理要求,但這些處理方式圖像處理效果差,占用CPU高,內(nèi)存占用大,程序運(yùn)行時(shí)間長(zhǎng)。舉例說(shuō)明如下:現(xiàn)有的Android系統(tǒng),一般是將截屏得到圖像像素?cái)?shù)據(jù)先保存成圖片,到使用時(shí)再去讀取,而保存和讀取的過(guò)程就是壓縮和解壓的過(guò)程,高清圖片具有很大的數(shù)據(jù)量,在保存和讀取時(shí),不但耗費(fèi)時(shí)間更是相當(dāng)耗費(fèi)Android系統(tǒng)內(nèi)存,導(dǎo)致系統(tǒng)運(yùn)行慢甚至卡死等。
[0003]因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問(wèn)題在于,針對(duì)現(xiàn)有技術(shù)的上述缺陷,提供一種基于Android系統(tǒng)的圖片處理方法及系統(tǒng),旨在解決現(xiàn)有Android系統(tǒng)的圖片處理速度慢、內(nèi)存占用大的問(wèn)題。
[0005]本發(fā)明解決技術(shù)問(wèn)題所采用的技術(shù)方案如下:
一種基于Android系統(tǒng)的圖片處理方法,其中,包括以下步驟:
A、將Android系統(tǒng)JAVA層得到的圖片的圖像像素?cái)?shù)據(jù)傳遞到JAVA本地調(diào)用層;
B、在所述JAVA本地調(diào)用層中,將所述圖像像素?cái)?shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體,以供開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)直接使用。
[0006]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟A具體包括:
AU、當(dāng)所述圖片的圖像像素?cái)?shù)據(jù)為位圖對(duì)象時(shí),在所述JAVA層創(chuàng)建一用于保存所述位圖對(duì)象對(duì)應(yīng)的圖像像素?cái)?shù)據(jù)的緩存區(qū)域;
A12、將所述位圖對(duì)象對(duì)應(yīng)的圖像像素?cái)?shù)據(jù)序列化;
A13、將所述位圖對(duì)象的寬高信息、色彩深度信息、通道信息及序列化后的圖像像素?cái)?shù)據(jù)發(fā)送至JAVA本地調(diào)用層。
[0007]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟B具體包括:
B11、在所述JAVA本地調(diào)用層中,創(chuàng)建一包含所述位圖對(duì)象的寬高信息、色彩深度信息及通道信息的圖像頭; B12、將序列化后的圖像像素?cái)?shù)據(jù)存放到所述圖像頭中,以形成所述位圖對(duì)象對(duì)應(yīng)的用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體。
[0008]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟A具體包括:
A21、當(dāng)所述圖片的圖像像素?cái)?shù)據(jù)為JPEG壓縮圖像像素?cái)?shù)據(jù)時(shí),在所述JAVA層獲取所述JPEG壓縮圖像像素?cái)?shù)據(jù)對(duì)應(yīng)的圖像像素?cái)?shù)據(jù)的數(shù)據(jù)長(zhǎng)度;
A22、將所述JPEG壓縮圖像像素?cái)?shù)據(jù)對(duì)應(yīng)的圖像像素?cái)?shù)據(jù)和數(shù)據(jù)長(zhǎng)度傳入JAVA本地調(diào)用層。
[0009]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟B還包括:
B21、在所述JAVA本地調(diào)用層中,創(chuàng)建一行為1、列為所述數(shù)據(jù)長(zhǎng)度、元素類(lèi)型為8位無(wú)符號(hào)單通道的空矩陣;
B22、將所述JPEG壓縮圖像像素?cái)?shù)據(jù)對(duì)應(yīng)的圖像像素?cái)?shù)據(jù)放入所述空矩陣,形成對(duì)應(yīng)的圖像數(shù)據(jù)矩陣;
B23、對(duì)所述圖像數(shù)據(jù)矩陣對(duì)應(yīng)解碼,得到所述JPEG壓縮圖像像素?cái)?shù)據(jù)對(duì)應(yīng)的用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體。
[0010]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟A還包括:
A30、將Android系統(tǒng)JAVA層得到的圖片的圖片路徑傳遞到JAVA本地調(diào)用層。
[0011]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟B還包括:
B30、在所述JAVA本地調(diào)用層中,根據(jù)所述圖片路徑生成對(duì)應(yīng)的用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體,以供開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)直接使用。
[0012]所述的基于Android系統(tǒng)的圖片處理方法,其中,所述步驟B還包括:
B40、將用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體轉(zhuǎn)化為對(duì)應(yīng)的灰度圖結(jié)構(gòu)體。
[0013]所述的基于Android系統(tǒng)的圖片處理方法,其中,在所述步驟B之后還包括:
C、判斷所述用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體的寬高信息是否在預(yù)先設(shè)置的寬高范圍內(nèi);若為是,則所述結(jié)構(gòu)體的寬高信息正確;若為否,則所述結(jié)構(gòu)體的寬高信息錯(cuò)誤。
[0014]一種基于Android系統(tǒng)的圖片處理系統(tǒng),其中,包括:
圖像像素?cái)?shù)據(jù)處理模塊,用于將Android系統(tǒng)JAVA層得到的圖片的圖像像素?cái)?shù)據(jù)傳遞到JAVA本地調(diào)用層;
結(jié)構(gòu)體生成模塊,用于在所述JAVA本地調(diào)用層中,將所述圖像像素?cái)?shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體,以供開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)直接使用。
[0015]本發(fā)明所提供的一種基于Android系統(tǒng)的圖片處理方法及系統(tǒng),有效地解決了現(xiàn)有Android系統(tǒng)的圖片處理速度慢、內(nèi)存占用大的問(wèn)題,通過(guò)將Android系統(tǒng)JAVA層得到的圖片的圖像像素?cái)?shù)據(jù)傳遞到JAVA本地調(diào)用層;在所述JAVA本地調(diào)用層中,將所述圖像像素?cái)?shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的用于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行圖像處理的結(jié)構(gòu)體,以供開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)直接使用;由于OpenCV (Open Source Computer Vis1n Library,開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù))是基于C/C++語(yǔ)言的非常強(qiáng)大的圖像處理庫(kù),不但方便并且實(shí)效性非常高,并且目前已有的成熟的圖像特征值提取和對(duì)比方式很多也是基于OpenCV。本發(fā)明可以直接獲取到圖片像素?cái)?shù)據(jù),不需要將這些像素?cái)?shù)據(jù)保存成圖片,然后將Android中JAVA層得到的圖片的圖像像素?cái)?shù)據(jù)進(jìn)行預(yù)處理,得到OpenCV庫(kù)可以直接使用的結(jié)構(gòu)體,這樣,OpenCV就可以得到整張圖片的細(xì)節(jié)信息并對(duì)應(yīng)進(jìn)行處理,很大程度上節(jié)約了程序運(yùn)行時(shí)間和系統(tǒng)內(nèi)存、CPU占用率,效率高,出錯(cuò)率小。本發(fā)明將在JAVA層中得到的圖片或者圖片數(shù)據(jù)處理后,可以在C++層使用OpenCV的方法進(jìn)一步靈活的使用已有的較好的圖像特征提取、比對(duì)等圖像處理算法,帶來(lái)了大大的方便。
【附圖說(shuō)明】
[0016]圖1為本發(fā)明提供的基于Android系統(tǒng)的圖片處理方法較佳實(shí)施例的流程圖。
[0017]圖2為本發(fā)明提供的基于Android系統(tǒng)的圖片處理系統(tǒng)較佳實(shí)施例的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0018]本發(fā)明提供一種基于Android系統(tǒng)的圖片處理方法及系統(tǒng),為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚、明確,以下參照附圖并舉實(shí)施例對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0019]首先對(duì)本發(fā)明的原理進(jìn)行