Android 애플리케이션을 개발 중이며 OpenCV4Android를 개발에 사용하고 있습니다 (버전 2.4.9).OpenCV를 사용하여 Android에서 카메라 화면 방향 발행
JavaCameraView 클래스를 사용하여 비디오 스트림을 열었습니다. 내 문제는 장치의 위치에 비해 카메라의 잘못된 방향입니다. 저는 삼성 갤럭시 S4를 사용하고 있으며 OpenCV 카메라의 기본 방향은 왼쪽으로 보이는 것 같습니다.
이 문제를 해결하기 위해이 솔루션을 사용했습니다.
if(isTablet(getContext()) == Boolean.FALSE){
this.getScreenRotationOnPhone();
}else{
this.getScreenRotationOnTablet();
}
다음 mCamera.startPreview()하기 전에, 나는 다음과 같은 코드를 추가 한의 initializeCamera 방법에
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;
}
그래서 :이 방법 새 클래스에 추가하는 JavaCameraView 클래스를 확장 한
이 코드는 작동하며 응용 프로그램이 느려지지 않습니다 (플립 메서드 또는 회전 행렬을 내 활동의 onCameraFrame 메서드에서 사용할 수 있습니다. 이렇게하면 성능이 떨어집니다).
내 방향이 가로 방향에서 가로 방향으로 바뀌거나 세로 방향에서 가로 방향으로 바뀌는 유일한 문제가 있습니다. 이 변경 후 내 카메라는 자연 위치와 관련하여 180도 회전합니다.
여기에는 문제를 보여주는 두 개의 이미지가 있습니다.