1

私は800*480の画面解像度の特定のタブレットデバイス用のAndroidアプリケーションを開発しました。プロジェクトの目的は、画像をキャプチャすることです(顔検出を使用)。このために、opencv2.4.2 sdkを使用して画像をキャプチャしました(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 GALAXYSIIでテストしました。

そして、私は1つの問題を抱えています。

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);

これで、SAMSUNG GALAXYSIIでフロントカメラが開きます。しかし、タブレットで「カメラを開けません」というエラーが発生しました。何が問題なのか。そして私はHTCdesireandroidデバイスでテストしました。ただし、空白の画面しか表示されません(カメラは開かれていません)。

新しい要件は、ユーザーがデバイスの上部にあるカメラの位置を保持することです。デバイスを回転させた場合、画面と画像は回転しません

非常に緊急です。誰かが私がこれを修正するのを手伝ってもらえますか?

4

1 に答える 1

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;
  }
}
于 2013-03-21T16:15:39.317 に答える