我为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;
}
它在Android平板电脑上运行良好。
现在我想在移动设备上使用我的应用程序。所以我用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);
现在它打开了SAMSUNG GALAXY S II的前置摄像头。但是在平板电脑中我得到了“无法打开相机”错误。可能是什么问题。而我测试了HTC渴望Android设备。但它只显示空白屏幕(相机未打开)。
新要求是用户将相机位置保持在设备顶部。如果他们旋转设备,则屏幕和图像不应旋转。
非常迫切。请有人帮我解决这个问题吗?
答案 0 :(得分: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;
}
}