gpt4 book ai didi

android - 使用OpenCV在Android中拍摄相机屏幕方向的问题

转载 作者:行者123 更新时间:2023-12-02 16:40:15 27 4
gpt4 key购买 nike

我正在开发一个Android应用程序,并且在开发中使用OpenCV4Android(版本2.4.9)。

我已经使用JavaCameraView类打开了视频流。我的问题是与设备位置相比,相机的方向不好。我使用的是三星Galaxy S4,OpenCV摄像机的默认方向似乎是横向。

为了解决此问题,我使用了此解决方案。我扩展了JavaCameraView类,将以下方法添加到新类中:

private void getScreenRotationOnPhone() {

final Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

switch (display.getRotation()) {
case Surface.ROTATION_0:
System.out.println("SCREEN_ORIENTATION_PORTRAIT");
setDisplayOrientation(mCamera, 90);
try {
mCamera.setPreviewDisplay(getHolder());
} catch (IOException e) {
e.printStackTrace();
}
break;

case Surface.ROTATION_90:
System.out.println("SCREEN_ORIENTATION_LANDSCAPE");
break;

case Surface.ROTATION_180:
System.out.println("SCREEN_ORIENTATION_REVERSE_PORTRAIT");
break;

case Surface.ROTATION_270:
System.out.println("SCREEN_ORIENTATION_REVERSE_LANDSCAPE");
setDisplayOrientation(mCamera, 180);
try {
mCamera.setPreviewDisplay(getHolder());
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}

private void getScreenRotationOnTablet() {

final Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

switch (display.getRotation()) {
case Surface.ROTATION_0:
System.out.println("SCREEN_ORIENTATION_LANDSCAPE");
break;

case Surface.ROTATION_90:
System.out.println("SCREEN_ORIENTATION_REVERSE_PORTRAIT");
break;

case Surface.ROTATION_180:
System.out.println("SCREEN_ORIENTATION_REVERSE_LANDSCAPE");
break;

case Surface.ROTATION_270:
System.out.println("SCREEN_ORIENTATION_PORTRAIT");
break;
}
}

public static boolean isTablet(Context ctx){
return (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

因此,在initializeCamera方法中,在mCamera.startPreview()之前,我添加了以下代码:
                if(isTablet(getContext()) == Boolean.FALSE){
this.getScreenRotationOnPhone();
}else{
this.getScreenRotationOnTablet();
}

此代码有效,应用程序也不会减慢速度(我也可以在 Activity 的onCameraFrame方法中使用flip方法或旋转矩阵,这样我的性能会变差)。

唯一的问题是,我的设备方向从横向向右更改为横向,反之亦然,而没有通过纵向模式。更改之后,我的相机相对于自然位置旋转了180度。

这里有两个显示问题的图像。

最佳答案

此180°旋转问题是Android平台的错误或功能。一种明显的解决方法是声明您的 Activity 仅使用一种风景和一种肖像方向(而不是全传感器)。

另一种方法是使用OrientationEventListener:请参见Rotating phone quickly 180 degrees, camera preview turns upside down

关于android - 使用OpenCV在Android中拍摄相机屏幕方向的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26449354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com