我正在開發Android應用程序,並且在開發中使用OpenCV4Android,版本爲2.4.9。在Android中使用OpenCV發佈相機屏幕方向
我用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();
}
此代碼有效,應用程序不會變慢(我也可以在我的活動的onCameraFrame方法中使用翻轉方法或旋轉矩陣,這樣我的表演會變得更糟)。
唯一的問題是當我的設備的方向從橫向改變到橫向時,反之亦然,而不經過縱向模式。在此更改後,我的相機相對於自然位置旋轉了180度。
這裏有兩個圖像顯示問題。