繁体   English   中英

使用OpenCV4Android无法同时使用Evo 4G的两个摄像机

[英]Unable to use both cameras of Evo 4G using OpenCV4Android

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

指数

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

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

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

PS Native Camera不起作用。 (Android 4.0.3)。

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

就像上面的答案所暗示的那样,我使用100作为Camera Index,但是它不适用于OpenCV,因此我尝试使用Android的Camera SDK,但是出现了一些错误。 但这是HTC Open Sense SDK的一部分,因此我在Eclipse上下载了它,并使用了http://www.htcdev.com/devcenter/opensense-sdk/stereoscopic-3d/s3d-sample-code/ 我使用了S3D Camera Demo的基本文件,并添加了一些其他功能,以便可以访问Camera图像数据并将其转换为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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM