2013-03-20 3 views
1

800 * 480 화면 해상도의 특정 태블릿 기기 용 Android 애플리케이션을 개발했습니다. 프로젝트 목표는 이미지를 캡처하는 것입니다 (얼굴 탐지 기능 포함). 이를 위해 opencv2.4.2 SDK를 사용하여 이미지 (opencv 얼굴 검출 샘플 사용)를 캡처했습니다. 해당 장치에서 카메라는 오른쪽 하단 모서리에 있습니다. 그래서 역 인물 사진 모드로 이미지를 캡처했습니다 (이미지를 조 변경 사용).휴대 기기에서 Android opencv 카메라 회전 문제

The code snippet is below: 
    @Override 
    protected Bitmap processFrame(VideoCapture capture) { 
     FdActivity.mSquaredImage = 0; 
     resolution = 0; 
     capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); 
     capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);   
     Core.transpose(mRgba, mRgba); 
     Core.transpose(mRgba, mGray); 
     ..... 
     ..... 
     return bmp; 
    } 

안드로이드 타블렛에서 잘 작동합니다.

이제 모바일 장치로 내 응용 프로그램을 사용하고 싶습니다. 그래서 SAMSUNG GALAXY S II로 테스트했습니다.

그리고 한 가지 문제가 있습니다.

The following code is to open the camera. 
    The code snippet is below: 
    public boolean openCamera() { 
     Log.i(TAG, "openCamera"); 
     synchronized (this) { 
      releaseCamera(); 
      mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID); 
      if (!mCamera.isOpened()) { 
       mCamera.release(); 
       mCamera = null; 
       Log.e(TAG, "Failed to open native camera"); 
       return false; 
      } 
     } 
     return true; 
    } 

이 코드는 전면 카메라를 태블릿으로 엽니 다. 그러나 SAMSUNG GALAXY S II에서는 후면 카메라가 열립니다. 이를 위해 나는 opencv.org 포럼에서 검색하고 나는 다음과 같은 솔루션,

 mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID+1); 

가 지금은 삼성 갤럭시 S II의 전면 카메라를 엽니 다 있어요. 하지만 타블렛에서 "카메라를 열 수 없습니다" 오류가 발생했습니다. 무엇이 문제 일 수 있습니다. 그리고 나는 HTC 욕망 안드로이드 장치로 테스트했습니다. 그러나 빈 화면 만 표시됩니다 (카메라가 열리지 않음).

새로운 요구 사항은 사용자가 카메라 상단의 위치를 ​​잡는 것입니다. 장치를 돌리면 화면과 이미지가 회전하지 않습니다..

매우 시급합니다. 누군가이 문제를 해결하도록 도와 줄 수 있습니까?

답변

2

Android 기기는 여러 개의 카메라 (앞면 또는 뒷면을 볼 수 있음)를 가질 수 있습니다. 이 상황을 처리하는 가장 좋은 방법은 먼저 고정 카메라 ID를 사용하는 대신 카메라의 수와 카메라의 방향을 확인하는 것입니다. 예를 들어 전면 카메라를 찾고 있다면 다음을 사용할 수 있습니다.

Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
int cameraCount = Camera.getNumberOfCameras(); 
for (int camIdx = 0; camIdx < cameraCount; camIdx++) 
{ 
    Camera.getCameraInfo(camIdx, cameraInfo); 
    if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) 
    { 
    mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID+camIdx); 
    break; 
    } 
} 
관련 문제