Невозможно использовать обе камеры Evo 4G с помощью OpenCV4Android

Я планирую рассчитать карту диспаратности, сделав два снимка с двух задних камер Evo 3D. Тем не менее, я могу использовать только одну камеру. Я попробовал другой индекс.

индекс

  • 0 дает мне левую камеру (одна из задних камер)
  • 1 дает мне фронтальную камеру
  • -1 дает мне левую камеру (одну из задних камер).

Однажды я получил другую камеру с индексом -1, но она больше не работает. я использую CameraBridgeViewBase,

Я видел в Google группу android-opencv, что люди успешно использовали обе камеры телефона Evo 3D. Я хочу знать, как это сделать? Есть ли какой-то другой индекс? или есть какой-то другой способ, с помощью которого я могу использовать это.

PS Родная камера не работает. (Android 4.0.3).

2 ответа

Решение

Как показывает приведенный выше ответ, я использовал 100 в качестве индекса камеры, но он не работал с OpenCV, поэтому я попытался использовать Android Camera 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-канальный мат. Собственно, для этого нужен только 1 канал мат.

Идентификатор стереоскопической камеры в Android изменился с 2 до 100 с обновлением ICS. Эта константа используется вызовом Android Camera.open. Я не думаю, что когда-либо был какой-либо официальный способ получить одну камеру или другую. Вы можете получить только одно изображение или оба изображения.

Другие вопросы по тегам