質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.22%

OpenCVでカメラを起動したいのだが、真っ暗のまま

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,892

ringring7777

score 23

以下のサイトを参考にしてOpenCVでカメラをアプリから開きたいのですが、真っ暗のままです。
とりあえずカメラを開きたいです。
権限もAndroidManifestに追加し、端末でもOKにしてます。
端末を再起動もしましたが失敗です。
OnCreateとmLoaderCallbackとonResumeメソッドは呼ばれているのですが、
onCameraViewStartedとonCameraFrameメソッドが呼ばれていません。

よろしくお願いいたします。

https://qiita.com/iwatake2222/items/2642669419fdaa20a8a6

簡単な画像認証はできたのでOpenCVの設定は済んでると思います。

//これでも成功判定出ます。
if (! OpenCVLoader.initDebug()) {
getApplicationContext(),  mLoaderCallback);
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this,  mLoaderCallback);
} else {

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}

OpenCV:4.1.1
AndroidStudio:3.3.2
Windows 10 64-bit
Java

public class TestActivity2 extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener {
    private CameraBridgeViewBase m_cameraView;
    /*static {
        System.loadLibrary("opencv_java4");     // 追加
    }*/

    // ライブラリ初期化完了後に呼ばれるコールバック (onManagerConnected)
    // public abstract class BaseLoaderCallback implements LoaderCallbackInterface
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            Log.d("tag","onManagerConnected・status="+status);
            switch (status) {
                // 読み込みが成功したらカメラプレビューを開始
                case LoaderCallbackInterface.SUCCESS:
                    Log.d("tag","読み込みが成功したらカメラプレビューを開始");
                    m_cameraView = findViewById(R.id.camera_view);
                    m_cameraView.setVisibility(SurfaceView.VISIBLE);
                    m_cameraView.setCvCameraViewListener(TestActivity2.this);
                    m_cameraView.enableView();
                    m_cameraView.enableFpsMeter();
                    break;
                default:
                    super.onManagerConnected(status);
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test2);
        getPermissionCamera(this);
        });

    }//OnCreate

    public static boolean getPermissionCamera(Activity activity) {
        if (ContextCompat.checkSelfPermission( activity, android.Manifest.permission.CAMERA)  != PackageManager.PERMISSION_GRANTED) {
            String[] permissions = new String[]{Manifest.permission.CAMERA};
            ActivityCompat.requestPermissions(activity,  permissions,0);
            return false;
        } else {
            return true;
        }
    }

    @Override
    protected void onResume() {
         super.onResume();
        if (! OpenCVLoader.initDebug()) {
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, getApplicationContext(),  mLoaderCallback);
        } else {
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }

    @Override
    public void onCameraViewStarted(int width, int height) {// カメラプレビュー開始時に呼ばれる
        Log.d("tag","カメラプレビュー開始時に呼ばれる・viewstart");
    }

    @Override
    public void onCameraViewStopped() {// カメラプレビュー終了時に呼ばれる
        Log.d("tag","カメラプレビュー終了時に呼ばれる");
    }

    @Override
    public Mat onCameraFrame(Mat inputFrame) {// フレームをキャプチャする毎(30fpsなら毎秒30回)に呼ばれる
        Core.bitwise_not(inputFrame, inputFrame);
        return inputFrame;
    }



}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:opencv="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    tools:context=".TestActivity2" >

    <org.opencv.android.JavaCameraView
        android:id="@+id/camera_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="visible"
        opencv:camera_id="back"
        opencv:show_fps="true" />


</RelativeLayout>
コード
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

+1

OpenCVのバージョンを下げたらうまくいきました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

OpenCV4.1.1だとダメで、OpenCV4.1.0だと動きました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る