【摘要】隨著Android平臺(tái)的不斷發(fā)展,現(xiàn)如今,Android已經(jīng)成為最主流的移動(dòng)平臺(tái),其平臺(tái)上的應(yīng)用也是多種多樣。本文結(jié)合Android平臺(tái)上一些出色的應(yīng)用,來剖析Android平臺(tái)上的一些圖像處理技術(shù),并部分給出可供參考的實(shí)現(xiàn)過程。
【關(guān)鍵詞】android;圖像變換;二維碼;OCR
1.Android圖像基礎(chǔ)
Android平臺(tái)圖片最基本的類是Bitmap,所有額圖片處理都是對(duì)Bitmap對(duì)象進(jìn)行的操作。 BitmapFactory負(fù)責(zé)從SD卡里面獲取圖片資源,由于android圖像相關(guān)的應(yīng)用大多與攝像頭有關(guān),很多應(yīng)用需要通過調(diào)用攝像頭來獲取圖片,這里有兩種方式:
方式一:使用相機(jī)的“回傳”機(jī)制,調(diào)用手機(jī)的相機(jī)應(yīng)用程序,完成拍攝后再獲取圖片。
Bundle bundle = data.getExtras();
Bitmap bmp = (Bitmap) bundle.get(\"data\");
此操作在startActivityForResult函數(shù)里面完成。
方式二:?jiǎn)?dòng)多線程,對(duì)攝像頭進(jìn)行快速的回調(diào)應(yīng)用,即不斷的獲取圖片,直到實(shí)現(xiàn)目的。
2.照片美化應(yīng)用:美圖秀秀
手機(jī)拍照成為了生活不可缺少的一部分,尤其是微博、微信等應(yīng)用的興起,即時(shí)拍照上傳為大家所喜愛,然而因?yàn)榄h(huán)境或設(shè)備的原因,拍攝下來的照片往往有一些瑕疵,因此在上傳之前,可以使用美圖秀秀對(duì)拍攝的照片進(jìn)行簡(jiǎn)單的處理,使其達(dá)到更好的效果
圖片變換:
Android平臺(tái)提供了一個(gè)3*3的矩陣,即坐標(biāo)變換矩陣,用來對(duì)圖形進(jìn)行坐標(biāo)變化,將原來的坐標(biāo)點(diǎn)轉(zhuǎn)移到新的坐標(biāo)點(diǎn),即是通過改矩陣的變換完成。由于一張圖片是由點(diǎn)陣和沒一點(diǎn)上的顏色信息組成的,所以對(duì)坐標(biāo)的變換,就是每一個(gè)點(diǎn)進(jìn)行“移動(dòng)”,形成新的一張圖片,具體說就是放大縮小、移動(dòng)、旋轉(zhuǎn)、扭曲等效果,均可以通過該矩陣實(shí)現(xiàn)。
矩陣A為坐標(biāo)變換矩陣,C為某一個(gè)點(diǎn)坐標(biāo),經(jīng)過計(jì)算后得到目標(biāo)點(diǎn)D的坐標(biāo),通過控制矩陣A的各個(gè)元素,可以實(shí)現(xiàn)某種變換。
具體實(shí)現(xiàn)以翻轉(zhuǎn)為例
構(gòu)造變換矩陣:
float floats = new float[]{1, 0, 0, 0, -1, 0, 0, 0, 1};
Matrix matrix = new Matrix();
matrix.setValues(floats);
得到目標(biāo)圖片:
Bitmap dstBmp = Bitmap.createBitmap (srcBmp, 0, 0, srcBmp.getWidth(), srcBmp.getHeight(), matrix, true);
3.信息隱藏應(yīng)用:二維碼
在android平臺(tái),二維碼技術(shù)由于其應(yīng)用廣泛,已經(jīng)有了其平臺(tái)下的開源庫(kù)ZXing,即是說,這里所有的圖像處理都已經(jīng)在該庫(kù)里實(shí)現(xiàn),開發(fā)人員直接使用即可。
下載zxing壓縮包,解壓后將core/src和javase/src中的com文件夾整體復(fù)制到你的android工程中。
3.1 獲取二維碼圖片
二維碼圖片的獲取主要通過調(diào)用攝像頭,啟動(dòng)多線程,對(duì)攝像頭進(jìn)行快速的回調(diào)應(yīng)用,當(dāng)一次回調(diào)的圖像沒有識(shí)別出來就進(jìn)行下一次的回調(diào),直到識(shí)別出二維碼為止。
3.2 對(duì)得到的圖片進(jìn)行解析
從攝像頭獲取到有二維碼信息的圖片,對(duì)改圖片信息進(jìn)行解碼,解碼過程同樣也是使用zxing庫(kù)所提供的API,完成一系列的調(diào)用,最終得到二維碼圖片中的信息,核心代碼如下:
最終將得到的信息可以是一段文字、一個(gè)鏈接等
4.字符識(shí)別應(yīng)用:有道翻譯
Android平臺(tái)的字符識(shí)別目前應(yīng)用也較為廣泛,通過攝像頭,獲取包含有字符信息的圖片,再通過字符識(shí)別軟件,將其中的信息提取出來,目前使用較多的是有道翻譯,有道翻譯可以通過攝像頭實(shí)時(shí)的獲取含有目標(biāo)單詞的圖片,然后提取出來進(jìn)行翻譯,從而能快速的幫助人們翻譯不熟悉的詞匯。
Android平臺(tái)的OCR技術(shù)目前有較多開源項(xiàng)目,其中開源項(xiàng)目tess-two的使用效果非常好,下載及編譯步驟如下:
下載tess-two
Git clone git://github.bom/rmtheis/tess-two tess
進(jìn)入tess目錄,并且編譯
cd tess/tess-two
ndk-build
編譯好后,將src下的兩個(gè)包以及l(fā)ibs導(dǎo)入到自己的項(xiàng)目即可以使用
tess-two同時(shí)需要下載tessdata語(yǔ)言包, 將其放在SD卡根目錄即可
下面是識(shí)別過程簡(jiǎn)單介紹
創(chuàng)建TessBaseAPI對(duì)象
TessBaseAPI baseApi=new TessBaseAPI();
baseApi.init(“tessdata包所在目錄”, “eng”);
識(shí)別字符
baseApi.setImage(bitmap);
String text = baseApi.getUTF8Text();
在識(shí)別字符之前,還可以對(duì)圖片進(jìn)行一些預(yù)處理,操作,放縮、設(shè)置一下透明度等,實(shí)驗(yàn)數(shù)據(jù)還表明,識(shí)別前對(duì)圖片進(jìn)行灰度化、二值化處理會(huì)進(jìn)一步提高識(shí)別率。
5.總結(jié)
Android應(yīng)用多種多樣,很多應(yīng)用都已經(jīng)完全融入我們的生活,圖像處理技術(shù)能夠在android平臺(tái)不斷應(yīng)用,也為我們的生活提供了更多方便。本文結(jié)合android上一些與圖像處理相關(guān)的出色應(yīng)用,剖析了這些應(yīng)用的部分圖像處理技術(shù),以及具體的實(shí)現(xiàn),通過了解并掌握這些應(yīng)用的相關(guān)技術(shù), 我們才能夠利用這些技術(shù)去開發(fā)更多出色的應(yīng)用。
參考文獻(xiàn)
[1]Lauren Darcey,Schane Conder. Android開發(fā)一本就夠[M].人民郵電出版社,2011,7.
[2]劉甫迎,劉炎.Android開發(fā)實(shí)用教程[M].北京:電子工業(yè)出版社,2012,1.
[3]朱懷中.基于Android的手機(jī)OCR識(shí)別技術(shù)設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技,2012,25(9).
[4]馬鳴,李海波.基于Android的二維碼的生成與識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2012,9.
[5]周勇.Android平臺(tái)下人臉識(shí)別系統(tǒng)的研究與實(shí)現(xiàn)[J].南京工程學(xué)院學(xué)報(bào),2013,11(1).
作者簡(jiǎn)介:李松柏(1992—),男,四川達(dá)州人,大學(xué)本科,研究方向:數(shù)字圖像處理。