2

Androidデバイスで写真を撮ろうとしています。画像は、API 内で結果を提供したい計算の入力となるように Mat として変換する必要があります。

Android はそのコールバックで byte[] データをどの形式で提供し、それをカラー形式の BGR で OpenCV Mat に変換する方法を教えてください。

最初の問題「SurfaceView なしで写真を撮る方法」が解決されました。表示されてはならない SurfaceTexture を使用しました。

mCamera = Camera.open();
mCamera.setPreviewTexture(new SurfaceTexture(10));

というわけで、プレビューを開始して写真を撮ることができました。しかし、byte[] データはどの形式で、それを OpenCV BGR Mat に変換する方法は?

mCamera.startPreview();
mCamera.takePicture(null, null, null, new PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                Log.e(MainActivity.APP_ID, "picture-taken");
                android.hardware.Camera.Size pictureSize = camera.getParameters().getPictureSize();
                Mat mat = new Mat(new Size(pictureSize.width, pictureSize.height), CvType.CV_8U);
                mat.put(0,0,data);
                mat.reshape(0, pictureSize.height);
//              Imgproc.cvtColor(mat, mat, Imgproc.COLOR_YUV420sp2RGBA);
......
4

1 に答える 1