用Android studio進行 OpenCV 開發的第一個項目

来源:http://www.cnblogs.com/whieenz/archive/2016/03/10/5262440.html
-Advertisement-
Play Games

我的天! 折騰了好久終於搭建成功了第一個項目。 項目環境: Windows 7 家庭普通版 64位 Android studio 1.5.1 OpenCV-2.4.9-android-sdk 基於Android studio上OpenCv開發環境的配置請參考 http://www.cnblogs.c


我的天!

折騰了好久終於搭建成功了第一個項目。

項目環境:

Windows 7  家庭普通版  64位

Android studio 1.5.1 

OpenCV-2.4.9-android-sdk

 

基於Android studio上OpenCv開發環境的配置請參考

http://www.cnblogs.com/whieenz/p/5247166.html

項目內容: 


很簡單將一張圖片灰度化。

項目源碼:

xml文件源碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.whieenz.myapplication.MainActivity"
    tools:showIn="@layout/activity_main"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="450dp"
        android:id="@+id/image"
        android:src="@drawable/genie" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="灰度化"
        android:id="@+id/button" />
</LinearLayout>

java文件代碼:

package com.whieenz.myapplication;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class MainActivity extends Activity { private ImageView imageView; private Button button; private Bitmap srcBitmap; private Bitmap grayBitmap; private static boolean flag = true; private static boolean isFirst = true; private static final String TAG = "gao_chun"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); imageView = (ImageView)findViewById(R.id.image); button = (Button)findViewById(R.id.button); button.setOnClickListener(new MyOnClickListener()) ; } public class MyOnClickListener implements View.OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub if(isFirst){ procSrc2Gray(); isFirst = false; } if(flag){ imageView.setImageBitmap(grayBitmap); button.setText("查看原圖"); flag = false; }else{ imageView.setImageBitmap(srcBitmap); button.setText("灰度化"); flag = true; } } } @Override protected void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9,getApplicationContext(),mLoaderCallback); } private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { super.onManagerConnected(status); switch (status){ case BaseLoaderCallback.SUCCESS: Log.i(TAG, "成功載入"); break; default: super.onManagerConnected(status); Log.i(TAG, "載入失敗"); break; } } }; public void procSrc2Gray(){ Mat rgbMat = new Mat(); Mat grayMat = new Mat(); srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.genie); 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..."); } }

具體流程:

  1. 新建Android工程
  2. 配置opencv開發環境
  3. 編輯xml文件
    主要是一個ImageView 和Button 控制項
  4. 編輯java文件
    1. 在onResume()里添加opencvloader.initsync();
    2. 自定義灰度化函數pcocSrc2Gray()
    3. 添加Button點擊事件調用灰度化函數
  5. 安裝opencv manager到模擬器

註意事項:

 

  1. 一定要安裝opencv manager到模擬器
  2. 提前配置好環境

項目展示:

 


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

-Advertisement-
Play Games
更多相關文章
  • 依賴註入起源於實現控制反轉的典型框架Spring框架,用來削減電腦程式的耦合問題。簡單來說,在定義方法的時候,方法所依賴的對象就被隱性的註入到該方法中,在方法中可以直接使用,而不需要在執行該函數的時候再參數中添加這些依賴對象。 理解很簡單,我們以一個例子說明 var $name = "chua",
  • 其實要講的就只有一個,那就是給瀏覽器加上本地Ajax運行,當你使用到了某些angularJS的功能的時候,例如路由,你直接運行頁面打開之後你會發現是空白的,打開控制台 發現 XMLHttpRequest cannot load 這種字眼的時候,其實是告訴你瀏覽器禁止了本地的Ajax申請,你需要給瀏覽
  • 削減是一個從源代碼中刪除不必要的字元的技術使它看起來簡單而整潔。這種技術也被稱為代碼壓縮和最小化。在這裡,我們為你收集了10個最好的JavaScript壓縮工具將幫助您刪除不必要的空格,換行符,評論,等等。這樣,你將使你的源代碼,無雜波。削減你的源代碼將改善載入時間和Web應用的性能。 這裡是你的完
  • iew controllers 通常是 iOS 項目中最大的文件,並且它們包含了許多不必要的代碼。所以 View controllers 中的代碼幾乎總是復用率最低的。我們將會看到給 view controllers 瘦身的技術,讓代碼變得可以復用,以及把代碼移動到更合適的地方。 你可以在 Gith
  • TextView 是個非常有用的組件,可使用XML來定義,也可使用程式代碼中的 Method方法來定義。 android:autoLink 設置是否當文本為URL鏈接/email/電話號碼/map時,文本顯示為可點擊的鏈接。可選值(none/web/email/phone/map/all) andr
  • 可能是由於粘貼網頁上的代碼的時候兩行之間的回車引起的,兩行之間重新輸入回車就行...。。。刪掉重新寫一遍就ok了
  • 個人筆記與總結。
  • 博客園官方API 花樣作死封裝網路層(iOS或OSX) === 前一段時間通過孤獨的貓咪神瞭解到博客園有官方API,據說今年四月份下旬的樣子推出吧。(道聽途說!)...我小小的申請去測試了下,打算也用博客園官方的API寫一點兒東西,例如OSX和iOS的小軟體。。在之前博客園官方的API也是公開的,舊
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...