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);
......