Невозможно использовать обе камеры 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. Я не думаю, что когда-либо был какой-либо официальный способ получить одну камеру или другую. Вы можете получить только одно изображение или оба изображения.