Фокус камеры opencv4android

Я хочу размыть изображение, поэтому мне нужно изменить режим фокусировки OpenCV. Я создал новый класс, чтобы наследовать javacameraview и установить режим фокусировки в классе. Теперь просто измените параметр mopencvcameraview на сбой. Я не могу найти причину. Пожалуйста, посмотрите, спасибо. Еще вопрос, как изменить параметры камеры в javacamera2view?

Моя JavaCameraView

public class MyJavaCameraView extends JavaCameraView {

    public MyJavaCameraView(Context context, int cameraId) {
        super(context, cameraId);
    }

    public MyJavaCameraView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
I want to blur the image, so I need to change the focus mode of OpenCV. I created a new class to inherit javacameraview and set the focus mode in the class. Now just change the mopencvcameraview parameter to crash. I can't find the reason. Please take a look, thank you. Another question is how to change camera parameters in javacamera2view?

    public void setFocusMode() {
        Camera camera = mCamera;
        Camera.Parameters mParameters = camera.getParameters();
        if (camera != null) {
            List<String> supportedFocusModes = mParameters.getSupportedFocusModes();
            if (supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_INFINITY)) {
                mParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY);
                camera.setParameters(mParameters);
            }

        }

    }
}

ImageManipulationsActivity

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "called onCreate");
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        setContentView(R.layout.image_manipulations_surface_view);

        mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.image_manipulations_activity_surface_view);
        //Change it to the following crash
        //mOpenCvCameraView = (MyJavaCameraView) findViewById(R.id.image_manipulations_activity_surface_view);
        mOpenCvCameraView.setVisibility(CameraBridgeViewBase.VISIBLE);
        mOpenCvCameraView.setCvCameraViewListener(this);
    }

person pamao    schedule 20.04.2020    source источник


Ответы (1)


Я думаю, вам может быть проще сделать изображение обычным образом с помощью камеры, а затем сделать размытие с помощью openCV.

Это также избавит вас от необходимости тестировать и адаптировать различные возможности камеры на разных устройствах.

Здесь есть хорошая документация OpenCV по размытию изображения: https://docs.opencv.org/master/d4/d13/tutorial_py_filtering.html

Я считаю, что с большей частью документации OpenCV нам обычно полезно понять подход в примерах Python, а затем применить его к Android, ссылаясь на документацию по классу Android Python.

person Mick    schedule 21.04.2020
comment
Может быть, я не ясно выразился. Мое единственное размытие находится в состоянии не в фокусе. Не в фокусе цветные точки на изображении будут крупнее, поэтому лучше провести обработку распознавания. благодарю вас - person pamao; 21.04.2020
comment
@pamao - я думаю, вы все еще можете размыть изображение после того, как сделаете снимок, а затем введете его в свой код распознавания? Это избавит вас от необходимости адаптироваться к другому аппаратному и программному обеспечению автофокусировки камеры. Также интересно, что вы обнаружите, что это обеспечивает лучшее распознавание — была ли у вас возможность сравнить его с некоторыми другими подходами — может быть интересно поделиться результатами, если вы видите значительное улучшение, если вы в состоянии? - person Mick; 30.04.2020