android.hardware.camera2.CaptureRequest可以与OpenCV一起使用吗?

Bri*_*ian 14 android opencv android-camera opencv4android

我已经为此工作了好几天了.我有一个基于OpenCV/JavaCameraView的项目我试图与android.hardware.camera2.CaptureRequest我用来控制相机对光的敏感度的Android 对象集成.

CameraBridgeViewBase.CvCameraViewListener2/JavaCameraView项目工程(我可以在屏幕上看到的图像),并在CaptureRequest项目工程(看到这一点,太),但是这两种技术在一个单一的项目组合已证明是一个很大的问题.

有没有人让这两种技术一起工作?我的目标是让摄像头处于CaptureRequest(有限的SENSOR_SENSITIVITY + SENSOR_EXPOSURE_TIME)的控制之下,但屏幕显示通过我写的OpenCV共享库过滤的流图像.

要控制相机,我可以使用这样的东西:

        mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
                new CameraCaptureSession.StateCallback() {
                    @Override
                    public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
                        // The camera is already closed
                        if (null == mCameraDevice) {
                            return;
                        }
                        long exposureTime = 66259688,frameDuration = 1000;
                        int sensitivity = 1512;

                        mCaptureSession = cameraCaptureSession;
                        try {

                            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);

                            setAutoFlash(mPreviewRequestBuilder);
                            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
                            mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, Long.valueOf(exposureTime));
                            mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, Integer.valueOf(sensitivity));
                            mPreviewRequestBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, Long.valueOf(frameDuration));

                            mPreviewRequest = mPreviewRequestBuilder.build();
                            mCaptureSession.setRepeatingRequest(mPreviewRequest,
                                    mCaptureCallback, mBackgroundHandler);


                        } catch (CameraAccessException e) {
                            e.printStackTrace();
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

要过滤图像流,我可以使用以下内容:

public class MyCoolScanner extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
...
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();

    OpenCVNative.myCoolLibrary(mRgba.getNativeObjAddr(),mGray.getNativeObjAddr());
    return mGray;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Abd*_*sae 0

我相信 OpenCV 本身不支持与 android.camera2 一起使用