Android For OpenCV的環境搭建

来源:https://www.cnblogs.com/zhoutao825638/archive/2019/02/15/10382006.html
-Advertisement-
Play Games

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


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是非常強大的一個類,好好玩吧。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 命令行模式登錄MySQL 2 命令行下使用:status 3 使用系統函數:version() 4 mysql --version 5 包管理工具(根據不同系統 rh系列或bsd系列) ...
  • 問題原因: 今天線上環境,突然出現一個問題,追蹤原因是資料庫中的一條語句報錯,錯誤內容:lock wait timeout exceeded; try restarting transactio 執行update table set status = 1 where id = 10002;是可以的。 ...
  • 在oracle中,臨時表分為會話級別(session)和事務級別(transaction)兩種。 會話級的臨時表在整個會話期間都存在,直到會話結束;事務級別的臨時表數據在transaction結束後消失,即commit/rollback或結束會話時,會清除臨時表數據。 1、事務級臨時表 on com ...
  • ...
  • 正文 MySQL Online DDL這個新特性是在 MySQL5.6.7 開始支持的,更早期版本的MySQL進行DDL對於DBA來說是非常痛苦的。現在主流版本都集中在5.6與5.7,為了更好的理解Online DDL的工作原理與機制,本文就對Online DDL的實現方式進行總結。 本文使用的My ...
  • mysqldump工具備份 備份整個資料庫 $ mysqldump u root h host p dbname backdb.sql 備份資料庫中的某個表 $ mysqldump u root h host p dbname tbname1, tbname2 backdb.sql 備份多個資料庫 ...
  • 本文由雲+社區發表 作者:NaOH 概述 stetho是Facebook開源的一個Android調試工具,項目地址:facebook/stetho 通過Stetho,開發者可以使用chrome的inspect功能,對Android應用進行調試和查看。 功能概述 stetho提供的功能主要有: Net ...
  • 在MAC上使用APICloud同步代碼時出現錯誤,其實就是git位置的問題,簡單點就是把路徑映射下。 問題提示: Can't locate SVN/Core.pm in @INC (you may need to install the SVN::Core module) (@INC contain ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...