2

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

指数

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

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

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

PS 原生相机不工作。(安卓 4.0.3)。

4

2 回答 2

2

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

于 2013-04-13T15:47:39.543 回答
2

正如上面的答案所暗示的,我使用 100 作为相机索引,但它不适用于 OpenCV,所以我尝试使用 Android 的相机 SDK,但出现了一些错误。但由于这是 HTC Open Sense SDK 的一部分,我在 Eclipse 上下载了它并使用了http://www.htcdev.com/devcenter/opensense-sdk/stereoscope-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。

于 2013-04-17T14:52:09.127 回答