Android에서 OpenCV를 사용해보기

TL;DR



Android Studio에서 OpenCV SDK를 사용하여 앱을 만드는 방법.

환경


  • OpenCV 4.2.0
  • Android Studio 3.5.3
  • macOS Catalina 10.15.3
  • kotlin

  • 사전 준비


  • 신규 프로젝트 작성
    Android Studio에서 빈 앱을 만듭니다.
  • OpenCV 다운로드
    OpenCV 출시 사이트에서 android 버전의 SDK를 다운로드하여 적절한 위치에 압축을 풉니 다.
    이번에는 opencv-4.2.0-android-sdk.zip을 사용합니다.

  • 구현



    OpenCV 캡처


  • OpenCV를 통합하려는 프로젝트를 Android Studio에서 엽니 다
  • 메뉴에서 File -> New -> Import Module 선택.
  • 미리 압축 해제 한 OpenCV SDK의 sdk 폴더를 지정하여 가져옵니다.
    모듈 이름은 기본값이면 sdk이므로 opencv-sdk

    모듈 종속성 추가



    앱 측 build.gradle의 dependencies에 sdk를 추가.

    build.gradle
    dependencies {
      implementation project(path: ':sdk')
      ...
    

    카메라 권한 추가



    앱의 AndroidManifest.xml에 카메라 권한 추가.

    AndroidManifest.xml
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-feature android:name="android.hardware.camera" android:required="false" />
        <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
    
    Activity/Fragment에도 권한 취득 처리를 작성하십시오.

    화면 레이아웃 작성



    Activity 레이아웃 XML에 카메라보기 추가

    activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout 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"
        tools:context=".MainActivity">
    
        <org.opencv.android.JavaCameraView
            android:id="@+id/camera_view"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:show_fps="true" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    코드 작성



    활동에 코드 추가.setCameraPermissionGranted() 잊지 않도록주의.

    MainActivity.kt
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            OpenCVLoader.initDebug()  // ← OpenCVライブラリ読込
            initCamera()
        }
    
        fun initCamera() {
            // リスナ設定 
            camera_view.setCvCameraViewListener(object : CameraBridgeViewBase.CvCameraViewListener2 {
                override fun onCameraViewStarted(width: Int, height: Int) { }
    
                override fun onCameraViewStopped() { }
    
                override fun onCameraFrame(inputFrame: CameraBridgeViewBase.CvCameraViewFrame?): Mat {
                    // このメソッド内で画像処理. 今回はポジネガ反転.
                    val mat = requireNotNull(inputFrame).rgba()
                    Core.bitwise_not(mat, mat)
                    return mat
                }
            })
    
            // プレビューを有効にする
            camera_view.setCameraPermissionGranted()
            camera_view.enableView()
        }
    

    실행 결과



  • 좋은 웹페이지 즐겨찾기