【首發】AndroidStudio配置JavaCV環境
由於最近參加一個比賽需要用到Face Service,但賽方限制使用第三方服務商提供的API雲端服務調用,因此想到了使用javacv來實現,但通過百度、google搜尋發現所有的教程都是在eclipse中搭建,為此頭疼了好幾天,今天早起重新搭建一氣呵成。寫此部落客要是給新手朋友們作為參考,也是我的第一篇博文。
1、準備工作
2、環境搭建
3、測試程式準備工作
-首先需要在google網站上下載javacv需要的包
-網站:https://code.google.com/archive/p/javacv/downloads
-無法開啟的朋友可用我分享的網盤下載 http://pan.baidu.com/s/1c2BIhmo
-下載的包: javacv-0.7-bin.zip、opencv-2.4.3-android-arm.zip
- 分別解壓 javacv-0.7-bin.zip、opencv-2.4.3-android-arm.zip 到任意目錄下
-此刻準備工作結束
環境搭建
1、使用AndroidStudio建立工程StudioTestJavaCV,名字可隨意
2、開啟AndroidStudio工程,在Android視圖下無法看到工程目錄中的libs檔案夾,因此點擊Android,將其更換Project視圖
將javacv-0.7-bin.zip 解壓的檔案夾中的 javacv.jar、javacpp.jar 拷貝到libs檔案夾中
然後右鍵工程,選擇Open Module Setting<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPqOs0aHU8U1vZHVsZXPPwrXEYXBwKLTLzqrE47XETW9kdWxltcTD+7PGKdbQtcQ8c3Ryb25nPkRlcGVuZGVuY2llczwvc3Ryb25nPqOsteO799PSsuDCzMmrtcS807rFKCspo6zRodTxPHN0cm9uZz4yLkZpbGUgZGVwZW5kZW5jeTwvc3Ryb25nPiAs0aHU8cztvNO41bLFv72xtL34wLS1xDxzdHJvbmc+amF2YWN2LmphcqGiamF2YWNwcC5qYXI8L3N0cm9uZz6hozxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="http://www.bkjia.com/uploads/allimg/160423/0414555028-2.png" title="\" />
3、接下來需要拷貝.so,在eclipse中只需要在libs檔案夾下建立armeabi檔案夾即可,但是由於AndroidStudio使用gradle編譯,於eclipse不同,因此按照eclipse中的方法將無法完成搭建。因此,follow me
還是同樣的Project視圖下,app>src>main 目錄下建立jniLibs目錄,然後再jniLibs下再建立armeabi目錄
3、在 javacv-0.7-bin.zip 解壓的檔案夾中找到 javacv-android-arm.jar 將其解壓出來
將該檔案夾下的所有.so檔案都拷貝到上一步建立的armeabi檔案夾下
然後再將opencv-2.4.3-android-arm.zip 解壓出來的目錄下的 libs > armeabi 下的所有.so檔案拷貝到上一步建立的armeabi檔案夾下。
以上環境搭建完成
測試程式圖片翻轉:
註:本代碼來自網路,若作者要求停止使用,請聯絡本人立即刪除
package com.act.studiotestjavacv;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;import static com.googlecode.javacv.cpp.opencv_core.cvFlip;import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.widget.ImageView;import com.googlecode.javacv.cpp.opencv_core.IplImage;public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.img1); imageView.setImageResource(R.drawable.p4); // 執行個體化控制項 ImageView img = (ImageView) findViewById(R.id.img); // 建立映像, p4是隨便找的一張映像,這裡可以自己隨便找一張圖片代替 Drawable drawable = idToDrawable(R.drawable.p4); Bitmap bitmap = this.drawableToBitmap(drawable); // 將Bitmap轉化為IplImage IplImage iplImage = this.bitmapToIplImage(bitmap); // 處理映像,比如旋轉映像 cvFlip(iplImage, iplImage, 0); // 再將IplImage轉化為Bitmap bitmap = this.IplImageToBitmap(iplImage); img.setImageBitmap(bitmap); } /** * IplImage轉化為Bitmap * @param iplImage * @return */ public Bitmap IplImageToBitmap(IplImage iplImage) { Bitmap bitmap = null; bitmap = Bitmap.createBitmap(iplImage.width(), iplImage.height(), Bitmap.Config.ARGB_8888); bitmap.copyPixelsFromBuffer(iplImage.getByteBuffer()); return bitmap; } /** * Bitmap轉化為IplImage * @param bitmap * @return */ public IplImage bitmapToIplImage(Bitmap bitmap) { IplImage iplImage; iplImage = IplImage.create(bitmap.getWidth(), bitmap.getHeight(), IPL_DEPTH_8U, 4); bitmap.copyPixelsToBuffer(iplImage.getByteBuffer()); return iplImage; } /** * 將資源ID轉化為Drawable * @param id * @return */ public Drawable idToDrawable(int id) { return this.getResources().getDrawable(R.drawable.p4); } /** * 將Drawable轉化為Bitmap * @param drawable * @return */ public Bitmap drawableToBitmap(Drawable drawable) { if(drawable == null) return null; return ((BitmapDrawable)drawable).getBitmap(); }}
可以隨便選擇一張圖片進行測試,效果如下
Android端javacv環境的搭建過程已經結束了,這是我的第一篇部落格,第一次寫部落格,想的太多,怕太粗略錯過重點,又怕太複雜沒有主次,總之是一個良好的開始,也算是作為一個學習的筆記作為後用,也希望能夠給跟我之前一樣在AndroidStudio上搭建javaCV環境遇到瓶頸的朋友作為一個參考。