2016年6月14日 星期二

執行OpenCV讀圖功能



 

安裝與設定Android開發環境

   http://opencv-android.blogspot.tw/2014/04/android.html

二、課程研讀

1. Android 虛擬機器(Android Virtual DeviceAVD

 Android 中一律把 Android 模擬器稱作「Android 虛擬機器」(Android Virtual Device),簡寫為「AVD」,能讓我們自由配置,模擬各種硬體規格的設備。
1.1創建虛擬機器的方法
要創建AVD有兩種方法:
(A)使用Eclipse開發環境建置
Android 軟體開發套件」(SDK 1.5 以上的版本提供了支援不同目標版本虛擬機器的功能,在使用虛擬機器之前,必須先建立一個虛擬機器後才可在 Eclipse 開發環境中使用。
而在1.6版之後可以直接在AVD管理工具中建立虛擬機器。在Eclipse中選擇「Window->Android SDK and AVD Manager」來開啟AVD管理工具
(B)使用命令行工具建置
SDK 中提供了一個「android」命令行工具(在 android-sdk/tools 中),可以用來建立新專案或是管理虛擬機器。

1.2 建立虛擬機器時的參數介紹

Name:自訂虛擬機器名稱,不能有空格或其他錯誤字符
Target:選擇適當的android目標版本
SD Card:自訂SD Card容量大小
SD Card-Size:選擇所需的容量大小,视個人需求而定,推薦256MB以上,此處的KiB就是KBMiB就是MB
Skin:選擇自訂的虛擬機器解析度。
Skin- Built-i:選擇螢幕的解析度,可以直接使用SDk提供的常用解析度。
常用解析度介紹:HVGA 320*480QVGA 320*240WQVGA400 400*240WQVGA432 432*240WVGA800 800*480WVGA854 854*480
Skin- Resolutio:自行定義解析度,除非有特殊需求,否则不建議自定。

1.3切換螢幕方向

 Windows 作業系統上按下 Ctrl」和「F12」鍵 ,或是在 Mac OS X 作業系統上同時按下「fn 、「Control」和「F12」鍵,螢幕就會從預設的直式顯示改成橫式顯示,再按一次則切換回原來的直式顯示。


以下介紹4項基本的常用按鈕對應列表

1.4移除程式

Android SDK 中提供一個 adb (Android Debugger) 命令行工具 ( android-sdk/tools ),我們可以用裡面的adb shell命令工具連上虛擬機器來移除應用程式。在某些平台上,這些動作可能需要擁有作業系統的root 權限才能執行。
首先打開命令列,啟動 adb shell
$ adb shell
如果虛擬機器尚未開啟,命令列上會出現error:device not found(未找到機器)這樣的錯誤訊息提示。意思是「adb shell」命令找步道已開啟的虛擬機器。

接著切換到 data/app 目錄中
    $ cd data/app/
使用 ls 命令(等同 windows 上命令行的 dir 命令)來檢視檔案列表
# ls
    com.example.android.apis.apk
Android應用程式的副檔名是.apk」。若只是輸入「Is」指令,螢幕上會列出檔名。若在「Is」指令後面加上一個「Is」選項,則會列出檔案詳細資訊。
接著使用 rm 命令來刪除 ApiDemos 應用程式
# rm com.example.android.apis.apk
    # ls

1.5移除虛擬機器

我們可以使用「android list avd」命令來列出所有的虛擬機器
$ android list avd
Available Android Virtual Devices:
    Name: eclair
    Path: /Users/mac/.android/avd/cupcake.avd
  Target: Android 2.0 (API level 5)
    Skin: HVGA
表示現在系統中有一個名為 eclair 的虛擬機器。 我們可以使用「android delete avd --name eclair」命令來刪除名稱為「eclair」的虛擬機器。
$ android delete avd --name eclair
AVD 'eclair' deleted.
刪除後再次執行「android list avd」命令,得到的結果為
$ android list avd
Available Android Virtual Devices:
表示系統中已經不存在任何模擬器,我們真的已經將虛擬機器刪除了。

2. Android程式開發套件(Software Development Kit,SDK)

Android SDK工具包中內容了開發Android應用程式所需的各種基本開發工具、函式庫等等。包括用於偵錯和其他用途的實用工具。被軟體工程師用於為特定的軟體包、軟體框架、硬體平台、作業系統等建立應用軟體的開發工具的集合。



在Andorid上執行OpenCV範例

   Ref : http://opencv-android.blogspot.tw/2014/04/andoridopencv_2.html


專案連結Library,對著App_OpenCV專案按右鍵 -> Properties,左邊選單選Android -> 右下按Add



在左邊Package Explorer處找到res/layout/fragment_main.xml,打開後在下方處點選Graphical Layout就是圖形化版型設計介面,而fragment_main.xml則是使用描述檔來編輯介面
註:最新版的ADT套件才會產生fragment_main.xml,舊的則為activity_main.xml,故使用本教學請下載最新的ADT套件

左鍵點擊兩下畫面中的”Hello World”就會進入xml描述檔編輯,
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HelloWorld" />
將這段程式碼中”HelloWorld”的地方改成”Original”
回到視覺化界面可以看到原本的”HelloWorld”已經改成Original了

在xml裡面將ImageView的區塊改寫成:
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="17dp"
android:height="50px"
android:maxHeight="100dp"
android:maxWidth="100dp" />



8.將要讀取的圖片放到專案存放處:Workspace/App_OpenCV/res/drawable-hdpi裡面,注意圖片須轉成bmp檔(只要用小畫家另存圖片為bmp檔即可輕鬆轉檔),並記住圖片名稱,範例中圖片名稱為”cat”
9.開啟MainActivity.java,位置在src/com.example.app_opencv裡


將MainActivity.java裡面的內容改寫為:

package com.example.app_opencv; import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import com.example.app_opencv.*;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
/* 讀圖程式碼
    Image Display */
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);//需設定到fragment_main.xml 才能正確顯示layout
// 讀取圖片檔案為bitmap
InputStream is = this.getResources().openRawResource(R.drawable.cat); //圖片名稱
Bitmap footbm = BitmapFactory.decodeStream(is);
//將bmp顯示在imageview上
ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.setImageBitmap(footbm);

}

}


Ref : http://opencv-android.blogspot.tw/2014/04/opencv.html

沒有留言:

張貼留言