移动设备中的Android opencv摄像头旋转问题

移动设备中的Android opencv摄像头旋转问题,android,opencv,camera,Android,Opencv,Camera,我为一款800*480屏幕分辨率的特定平板设备开发了一款android应用程序。项目目标是捕获图像(带有人脸检测)。为此,我使用opencv2.4.2SDK来捕获图像(使用opencv人脸检测示例)。在该设备中,相机位于右下角。所以我用反向肖像模式(使用转置图像)拍摄图像 它在安卓平板电脑上运行良好 现在我想将我的应用程序用于移动设备。所以我用三星GALAXY S II测试了它 我有一个问题 The following code is to open the camera. The co

我为一款800*480屏幕分辨率的特定平板设备开发了一款android应用程序。项目目标是捕获图像(带有人脸检测)。为此,我使用opencv2.4.2SDK来捕获图像(使用opencv人脸检测示例)。在该设备中,相机位于右下角。所以我用反向肖像模式(使用转置图像)拍摄图像

它在安卓平板电脑上运行良好

现在我想将我的应用程序用于移动设备。所以我用三星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;
    }
此代码打开平板电脑中的前置摄像头。但在三星GALAXY S II中,它打开了后置摄像头。为此,我在opencv.org论坛上搜索,得到了以下解决方案

        mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID+1);
现在它打开了三星GALAXY S II的前置摄像头。但在平板电脑中,我发现“无法打开摄像头”错误。可能有什么问题。我用HTC desire android设备进行了测试。但它只显示空白屏幕(相机未打开)

新要求是用户将摄像头的位置固定在设备顶部。如果他们旋转设备,屏幕和图像不应旋转


这很紧急。有人能帮我解决这个问题吗?

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;
  }
}
Camera.CameraInfo CameraInfo=新的Camera.CameraInfo();
int cameraCount=Camera.getNumberOfCameras();
对于(int-camIdx=0;camIdx
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;
  }
}