使用OpenCV自动关注Android

时间:2018-07-25 23:33:48

标签: android opencv android-camera opencv4android

我正在使用OpenCV编写应用程序。我使用了将相机与OpenCV结合使用的标准方法。

private CameraBridgeViewBase mOpenCvCameraView;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(
    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setContentView(R.layout.show_camera);
    mOpenCvCameraView = (JavaCameraView) findViewById(R.id.show_camera_activity_java_surface_view);
    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
    mOpenCvCameraView.setCvCameraViewListener(this);
}

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();

问题是,它似乎可以在我自己的手机上很好地工作,但不能在相同型号和相同Android版本的其他手机上工作。我无法对自己进行测试/调试,因为他们在另一个国家。这是一个非常奇怪和令人沮丧的问题!

我想消除焦点问题,所以我想实现自动对焦。

我花了几天时间研究许多教程和有关如何添加自动对焦的示例。例如,一个教程(https://www.thecodecity.com/2016/08/focus-modes-opencv-javacameraview-android.html)使我编写了自己的JavaCameraView子类。在示例中是

public class MyCameraView extends JavaCameraView {
    public MyCameraView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
public void setFocusMode(Context item, int type) {
    Camera.Parameters params = mCamera.getParameters();
    .......
    mCamera.cancelAutoFocus();
    mCamera.autoFocus(new Camera.AutoFocusCallback() {
        @Override
        public void onAutoFocus(boolean b, Camera camera) {
        }
    });

编写教程的方式实际上导致应用程序崩溃...但是我重写了某些部分以使其运行。

我使用MACRO模式。该教程在我修复了错误之后起作用了,但是只关注一次,然后保持关注不变。我的应用需要自动对焦才能继续。

我将“ .....”之后的行移到一个方法中,并在回调中再次调用同一方法。看来可行,但这是一个好方法吗?有内存泄漏的风险吗?其他负面副作用吗?

它可以工作,但是会过多地重置自动对焦。我希望在每次重置之间有500ms的暂停时间。 (添加Thread.sleep()并不是一个好方法。)我该怎么做?

您知道OpenCV出色的自动对焦代码的实际工作示例吗?

0 个答案:

没有答案