Android Studio-—使用OpenCV的配置方法和demo以及開發過程中遇到的問題解決

来源:http://www.cnblogs.com/yunfang/archive/2016/12/09/6149831.html
-Advertisement-
Play Games

前提: 1.安裝Android Studio(過程略) 2.官網下載OpenCV for Android 網址:http:opencv.org/downloads.html 我下載的是下圖的版本 3.將下載好的OpenCV for Android解壓到固定文件夾 4.新建一個android項目(就新 ...


前提:

      1.安裝Android Studio(過程略)

      2.官網下載OpenCV for Android 網址:http:opencv.org/downloads.html 我下載的是下圖的版本

    3.將下載好的OpenCV for Android解壓到固定文件夾 

    4.新建一個android項目(就新建一個就好,以後用到)

     以上的步驟基本沒有什麼問題(除了打開網頁的時候網速很慢。。。)

Android Studio導入OpenCV:

    1.點擊File-new-import Module如圖:

     

     2.Source directory中填寫內容:找到步驟1中解壓OpenCV for Android的位置OpenCV-android-sdk   —>  sdk—>  java直接拷貝,拷貝完畢後會出現Module                     name(我的因為已經導入過了所以會有感嘆號正常情況下點擊下一步下一步下一步就好)

    

   上述步驟可能會遇見的錯誤:導入之後各種bug輸出,,,,,我的如下圖(只是截取的部分):

    

    解決:導入OpenCV for Android後應該將openCVLibrary310下的build.gradle文件改成和第一步自己新建的android項目下的build.gradle文件相同,然後clean一下,OK

將openCVLibrary310應用到自己的項目:

   1.點擊File-Project Structure會出現下圖:Modules下邊找你新建的android項目後點擊Dependencies

   

   2.點擊右側加號選第三個Module dependency後選擇openCVLibrary310後點擊完成

    

   以上完成後你的app就可以使開發openCV了

android使用OpenCV將彩圖轉化為灰圖的例子:

  MainActivity.java代碼:

package com.example.lenovo.myapplication;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.example.lenovo.R;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

public class MainActivity extends AppCompatActivity {
    Button btnProcess;
    Bitmap srcBitmap;
    Bitmap grayBitmap;
    ImageView imgHuaishi;
    private static boolean flag = true;
    //private static boolean isFirst = true;
    private static final String TAG = "MainActivity";

    //OpenCV庫載入並初始化成功後的回調函數
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

        @Override
        public void onManagerConnected(int status) {
            // TODO Auto-generated method stub
            switch (status){
                case BaseLoaderCallback.SUCCESS:
                    Log.i(TAG, "成功載入");
                    break;
                default:
                    super.onManagerConnected(status);
                    Log.i(TAG, "載入失敗");
                    break;
            }

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUI();
        btnProcess.setOnClickListener(new ProcessClickListener());
    }
    public void initUI(){
        btnProcess = (Button)findViewById(R.id.btn_gray_process);
        imgHuaishi = (ImageView)findViewById(R.id.img_huaishi);
        Log.i(TAG, "initUI sucess...");

    }

    public void procSrc2Gray(){
        Mat rgbMat = new Mat();
        Mat grayMat = new Mat();
        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.text_img);
        grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
        Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat
        Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap
        Log.i(TAG, "procSrc2Gray sucess...");
    }

    private class ProcessClickListener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
//            if(isFirst)
//            {
                procSrc2Gray();
//                isFirst = false;
//            }
            if(flag){
                imgHuaishi.setImageBitmap(grayBitmap);
                btnProcess.setText("查看原圖");
                flag = false;
            }
            else{
                imgHuaishi.setImageBitmap(srcBitmap);
                btnProcess.setText("灰度化");
                flag = true;
            }
        }

    }

    @Override
    public void onResume()
    {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
        } else {
            Log.d(TAG, "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }
}

  對應的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    tools:context="com.example.mytest.MainActivity">

    <ImageView
        android:id="@+id/img_huaishi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>
    <Button
        android:id="@+id/btn_gray_process"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/img_huaishi"
        android:layout_centerHorizontal="true"
        android:text="灰度化"/>"
</RelativeLayout>

     這樣就夠了,然後點擊運行。。。。。

     呵呵,,運行失敗對不對,提醒要要安裝opencv manager的apk,,我吧官方demo中所有的apk都安裝了,還是提示未安裝,,程式不能運行,,,後來想想,實際開發中        需要人臉識別一類的功能,還非得讓客戶用你的軟體的同時還非要安裝opencv manager的apk?那用戶體驗也是沒誰了。。。。。。然後就找到了一種不安裝這個apk也可以照      常使用OpenCV了

     參考網址:http://jingyan.baidu.com/article/60ccbceb53533364cab197db.html

     方法如下:

     1.把OpenCV sdk for Android文件下F:\OpenCV-android-sdk\sdk\native下的libs文件夾拷貝到你的安卓項目下,即自己的項目\src\main下麵,並且將libs改名為         jniLibs

     2.將OpenCV-android-sdk\samples\image-manipulations\res\layout下的xml文件拷貝到自己的項目\src\main\res下麵

     3.將OpenCV-android-sdk\samples\image-manipulations\src\org\opencv\samples\imagemanipulations下的java文件拷到自己的項目\src\main\java\你                       MainActivity所在的包名,即和MainActivity同級目錄

     4.在項目清單文件中為剛纔導入的java文件進行配置,加上相應的許可權,如圖:

       

     接下來運行你的項目,就妥妥的了

     我的運行後截圖:

   

   最後說說遇到的其他奇葩問題:

   1.明明哪裡都妥妥的了,資源文件沒有問題,就是找不到R文件 clean也找不到,,,,

     不擇手段的解決方法:手動寫 import 你的報名.R 我試了,,OK了。。。。。。。

   2.運行app時候出錯如圖:

    

    解決如圖:Enable ADB Integration勾選一下

   

   備忘,希望給大家帶來幫助。

     

 

 

 

   

 

 


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

-Advertisement-
Play Games
更多相關文章
  • var aLi = document.querySelectorAll('.article-tab li'); for (var i = 0; i <= aLi.length; i++) { (function(){ var p = i aLi[i].onclick = function() { a ...
  • 線上預覽 下載地址 實例代碼 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=" ...
  • 現在我們的手機一般都內置有方向感應器,手機屏幕會根據所處位置自動進行橫豎屏切換(前提是未鎖定屏幕方向)。但有時我們的應用程式僅限在橫屏或者豎屏狀態下才可以運行,此時我們需要鎖定該程式Activity運行時的屏幕方向。還有就是在我們用手機觀看視頻時,隨意的進行橫豎屏切換,但播放進度不會隨著屏幕的轉換而 ...
  • 最近打包上傳是遇到一個問題: 描述: Missing Push Notification Entitlement - Your app includes an API for Apple's Push Notification service, but the aps-environment ent ...
  • 轉載地址:http://blog.csdn.net/rowland001/article/details/50886288 從今天開始呢,我要開始學習Google家自己出的Android代碼示例,總覺得這才是原汁原味的。 我用的是Google自家的Android Studio,目前是這個版本: 其實 ...
  • Android打電話有兩種實現方法: 第一種方法,撥打電話跳轉到撥號界面。源代碼如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data = Uri.parse("tel:" + "135xxxxxxxx"); intent.setDa ...
  • 在iOS開發過程中經常需要通過網路請求載入圖片,有時,需要在創建UIImageView或UIButton來顯示圖片之前需要提前知道圖片的尺寸,根據圖片尺寸創建對應大小的控制項。但是對於網路圖片來說,要想通過最優的方法獲得尺寸就略微有點困難,大體思路就是下麵這種: 如果有使用SDWebImage,則首先 ...
  • 由於我是在win7的環境下,在這裡就以win7系統為例進行講解了。 首先需要在nodejs官網下載最新版的node.js,下載完畢直接安裝即可,安裝成功後在cmd命令行中執行node指令,如下結果就說明安裝成功 node安裝成功後會自動安裝npm(包管理器,編譯源代碼安裝需要手動安裝),這是Node ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...