在Android中使用OpenCV 2.4.5庫

來源:互聯網
上載者:User

雖然在OpenCV官網上有如何在Android中使用OpenCV庫的文章,但是按照那個文章來根本沒法成功調入OpenCV庫。因此特撰寫此文給出正確的掛載庫的方法和掛載OpenCVManager時,函數調用的順序。


首先本文不討論如何通過static靜態塊的方法掛載OpenCV庫(因為這個方法我沒有成功),討論的是通過實現 CvCameraViewListener 介面同步掛載OpenCV庫,這也是OpenCV官網上推薦的做法:

Using async initialization is arecommendedway for application
development. It uses the OpenCV Manager to access OpenCV libraries externally installed in the target system.

通過此方法掛載的步驟為:

  1. 實現CvCameraViewListener 需要實現的虛函數,Eclipse中可以自動補全需要實現的虛函數。
  2. 定義BaseLoaderCallback回呼函數介面,並實現這個類中的onManagerConnected()方法
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {        @Override        public void onManagerConnected(int status) {            switch (status) {                case LoaderCallbackInterface.SUCCESS:                {                System.out.println("OpenCV loaded successfully");                } break;                default:                {                System.out.println("OpenCV loaded Failed!");                    super.onManagerConnected(status);                } break;            }        }    };


  3. 覆寫Activity中的OnResume方法,在調用預設OnResume後進行OpenCV庫的同步掛載(2.4.5版本)
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5, this, mLoaderCallback);

  4. 至此實現了OpenCV庫的掛載,關鍵的問題來了,在OnCreate函數中不能使用OpenCV庫相關的類和方法,因為此時OpenCV庫還沒有掛載上去!即使把initAsync方法放到OnCreate中也不行!博主在這裡卡了很久通過各種調試才發現這個問題。可以使用Handler的方法延遲新的線程的啟動以等待OpenCV庫的載入


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.