Я пытаюсь сделать снимок с помощью устройства Android. Изображение должно быть преобразовано как мат, чтобы быть входом для вычислений, результаты которых я хотел бы предоставить в API.
В каком формате Android предоставляет данные byte[] в своем обратном вызове и как преобразовать их в OpenCV Mat в цветовом формате BGR?
Первая проблема: "Как сделать снимок без 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);
......