Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 【首發】AndroidStudio配置JavaCV環境

【首發】AndroidStudio配置JavaCV環境

編輯:關於android開發

【首發】AndroidStudio配置JavaCV環境


由於最近參加一個比賽需要用到人臉識別,但賽方限制使用第三方服務商提供的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 將其解壓出來
解壓javacv-adnroid-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環境遇到瓶頸的朋友作為一個參考。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved