如何使用 CameraX 在 Android 中提高相机速度

问题描述

嗨,我是 Android 编程新手。

如标题,如何使用CameraX或Camera2或OpenCV提高拍照速度? 我的项目目标是使用 Android 和 OpenCV 尽快处理图像(4k 图像)。

如果您有任何意见,请告诉我。

void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {

        Preview preview = new Preview.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_16_9)
                .build();

        CameraSelector cameraSelector = new CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                .build();

        executor = Executors.newSingleThreadExecutor();

        ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_16_9)
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .build();

        ImageCapture imageCapture = new ImageCapture.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_16_9)
                .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
                .build();

        camera_capture_button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v){
                Log.v("Info","Button Click");
                imageCapture.takePicture(executor,new ImageCapture.OnImageCapturedCallback() {
                    @Override
                    public void onCaptureSuccess(@NonNull ImageProxy image) {
                        super.onCaptureSuccess(image);
                        Log.v("Info","Capture Success = W:" + image.getWidth() + "/" + "H:" + image.getHeight());

                        Bitmap bitmap = toBitmap(image);
                        Log.v("Info","Bitmat cvt = W:" + bitmap.getWidth() + "/" + "H:" + bitmap.getHeight());

                        Mat matOriginal = new Mat();
                        Mat matResult = new Mat();
                        Utils.bitmapToMat(bitmap,matOriginal);
                        Log.v("Info","Mat cvt = W:" + matOriginal.width() + "/" + "H:" + matOriginal.height());

                        Imgproc.cvtColor(matOriginal,matResult,Imgproc.COLOR_BGR2HSV);

                        image.close();
                    }

                    @Override
                    public void onError(@NonNull ImageCaptureException exception) {
                        Log.v("Info","Capture Error");
                        exception.printStackTrace();
                    }
                });
            }
        });

这是用来测量时间的 Logcat 消息

2021-05-12 16:20:40.427 V/Info:按钮点击

2021-05-12 16:20:40.976 V/Info:捕获成功 = W:3840/H:2160

2021-05-12 16:20:41.092 V/Info:位图 cvt = W:3840/H:2160

2021-05-12 16:20:41.106 V/Info:Mat cvt = W:3840/H:2160

作为结果

549 毫秒 - takePicture(我觉得太慢了)

116 毫秒 - 位图转换

014 毫秒 - 垫转换

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...