我正在尝试使用 Android 设备拍照。图片必须转换为 Mat 以作为计算的输入,我喜欢在 API 中提供结果。
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);
......