Android For OpenCV的環境搭建


OpenCV是一個基於BSD許可(開源)發行的跨平台計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類,同時提供了Python、Ruby、MATLAB等語言的接口,實現了和計算機視覺方面的很多通用算法百度百科 詞條:opencv

  • 目前公司項目的新功能用到圖片識別功能,在了解到過程中知道了OpenCV這個神器,因此學習了基礎,特地來記錄,防止以后忘記。后期將進一步完善其學習記錄。更多內容歡迎訪問我的個人網站

我用到東西如下:

下載OpenCV4Android

  • 將壓縮包解壓后可以看到有以下文件,其中使用紅線包裹的文件夾是非常重要的文件夾,后面要用到
    OpenCV for  Android 文件結構圖.png
  • apk 保存的是一些基礎包,要根據你的手機芯片的架構安裝合適的版本,否則將會提醒你安裝,以至於各種錯誤,所以在之前,還是老老實實安裝吧。
  • samples 保存的一些demo,可以根據自己的需要進行學習
  • sdk 我們開發所用的一些工具

注意:我在學習的過程,直接在手機安裝會報解析安裝包錯誤,以至於無法安裝,那么這里需要連接開發者模式,使用adb進行安裝,命令: adb install ****.apk 就可以安裝成功了。

創建工程

  • 創建一個普通的安卓工程即可,然后我們需要導入Module

  • 導入Module 這個東西就是上圖中的java文件夾,選擇File--> new --> import Module 選擇步驟一圖中紅色框框圈起來的JAVA文件夾即可,然后在文件欄中就可以看到這個新的Module了,后面的320指的是版本號,每個人可能不一樣
    導入Module之后的工程架構.png

  • 導入Module之后我們需要配置一下,在File--->Project Structure菜單中選擇該Moudle作為庫依賴即可,如下操作

3.png

選擇Module.png

注意:在某些情況下,再倒入Module的情況下,會出現報錯的情況,這是修改Module的編譯版本和目標版本和APP的保持一致,然后重新Sync即可.

導入庫文件

  • 這里需要導入so庫等文件,文件就在步驟一圖的用紅線圈中的libs文件夾里面,選中里面的所有文件,注意是選中lib里面所有的文件,不是選中libs文件夾。

  • 在項目中,選app工程,在src/main目錄下新建jniLibs文件夾,將上面選中的文件全部復制到其中。

  • 為了確保工程創建成功,我們可以重新reBuild一下工程

載入Opencv

  • 我們在Activity的回調函數中異步初始化OpenCV,代碼很簡單,一句話加上一個回調。
    @Override
    protected void onResume() {
        super.onResume();
        //載入OpenCv初始化引擎,並載入庫,可以看到initAsync,使用的是異步加載
        //因此需要提供回調函數
       //OpenCVLoader.OPENCV_VERSION_3_2_0指的是版本號,請根據你自己的版本選擇
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, getApplicationContext(), mLoaderCallback);
    }
    //OpenCV庫加載並初始化成功后的回調函數
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            // TODO Auto-generated method stub
            switch (status) {
                case BaseLoaderCallback.SUCCESS:
                    Log.e("OpenCv", "成功加載");
                    break;
                default:
                    super.onManagerConnected(status);
                    Log.e("OpenCv", "加載失敗");
                    break;
            }
        }
    };

使用OpenCV

  • 我們來使用OpenCv做一個簡單灰度圖
  • 首先是布局文件,就一個簡單的圖片
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/img"
        android:layout_width="600px"
        android:layout_height="1000px"
        android:layout_centerHorizontal="true" />
  </RelativeLayout>
  • 具體代碼如下
        Mat rgbMat = new Mat();
        Mat grayMat = new Mat();
        //從資源中獲取圖片
        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.psb);
        //構建灰度RGB圖片
        grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
        //將資源圖片轉化為Mat類資源
        Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
        //將圖片灰度化
        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
        //將灰度Mat轉換為灰度BitMap資源
        Utils.matToBitmap(grayMat, grayBitmap); 
        //設置顯示
        ((ImageView)findviewById(R.id.img)).setImageBitmap(binaryBitmap);
  • 效果圖

灰度效果圖.png

當然還有更多的使用方法沒有再此詳細闡述,可以再網上尋找一些資源,Mat是非常強大的一個類,好好玩吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM