【问题标题】:Unable to use both cameras of Evo 4G using OpenCV4Android使用 OpenCV4Android 无法同时使用 Evo 4G 的两个摄像头
【发布时间】:2013-04-04 06:48:43
【问题描述】:

我打算通过从 Evo 3D 的两个后置摄像头拍摄两张照片来计算视差图。但是,我只能使用一台相机。我尝试了不同的索引。

索引

  • 0 给了我左摄像头(后置摄像头之一)
  • 1 给我前置摄像头
  • -1 给了我左摄像头(后置摄像头之一)。

我曾经使用 -1 索引获得其他相机,但它不再工作了。我正在使用CameraBridgeViewBase

我在 android-opencv 的 Google 小组上看到人们成功使用了 Evo 3D 手机的两个摄像头。我想知道怎么做?还有其他指标吗?还是有其他方法可以使用它。

附:本机相机不起作用。 (Android 4.0.3)。

【问题讨论】:

    标签: android opencv stereo-3d htc-android


    【解决方案1】:

    正如上面的答案所暗示的,我使用 100 作为相机索引,但它不适用于 OpenCV,所以我尝试使用 Android 的相机 SDK,但出现了一些错误。但由于这是 HTC Open Sense SDK 的一部分,我在我的 Eclipse 上下载了它并使用了 http://www.htcdev.com/devcenter/opensense-sdk/stereoscopic-3d/s3d-sample-code/ 。我使用了S3D Camera Demo 的基础文件,并添加了更多功能,以便我可以访问相机图像数据并将其转换为 OpenCV Mat。

    因此,我对该代码中的 onTouchEvent 函数进行了一些更改,并在那里添加了更多代码。

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        //  toggle();
            //Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            //startActivityForResult(cameraIntent, 1337);
            int bufferSize = width * height * 3;
            byte[] mPreviewBuffer = null;
    
            // New preview buffer.
            mPreviewBuffer = new byte[bufferSize + 4096];
    
            // with buffer requires addbuffer.
            camera.addCallbackBuffer(mPreviewBuffer);
            camera.setPreviewCallbackWithBuffer(mCameraCallback);
            break;
        default:
            break;
        }
        return true;
    }
    
    
    
    private final Camera.PreviewCallback mCameraCallback = new Camera.PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera c) {
        Log.d(TAG, "ON Preview frame");
        img = new Mat(height, width, CvType.CV_8UC1);
        gray = new Mat(height, width, CvType.CV_8UC1);
        img.put(0, 0, data);        
    
    
    
        Imgproc.cvtColor(img, gray, Imgproc.COLOR_YUV420sp2GRAY);
        String pixvalue = String.valueOf(gray.get(300, 400)[0]);
        String pixval1 = String.valueOf(gray.get(300, 400+width/2)[0]);
        Log.d(TAG, pixvalue);
        Log.d(TAG, pixval1);
            // to do the camera image split processing using "data"
    }
    };
    

    您从相机获得的图像处于YUV420s 模式,我最初在访问数据时遇到了问题,因为我创建了一个 4 通道 Mat。实际上,它只需要 1 个通道 Mat。

    【讨论】:

      【解决方案2】:

      随着 ICS 升级,Android 中的立体相机 ID 从 2 更改为 100。这是 Android Camera.open 调用使用的常量。我不认为有任何官方方法可以获取一台或另一台相机。您只能获取一张图片或两张图片。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-26
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多