【问题标题】:Incorrect image orientation in Android onPreviewFrame() callback?Android onPreviewFrame() 回调中的图像方向不正确?
【发布时间】:2017-11-29 06:54:21
【问题描述】:
我使用setPreviewCallbackWithBuffer 并在onPreviewFrame() 回调中获取视频帧像素数据。字节数据为YUV NV21格式,旋转90度。我确实知道如何将预览帧从 YUV 转换为 RGB 并将其旋转回来。但是这花了我不需要的时间(大约 20 毫秒),因为我后来有很多图像处理任务。在没有旋转和转换代码的情况下,我应该如何配置相机参数或做其他任何事情来获得正确的方向视频帧?
【问题讨论】:
标签:
android
opencv
image-processing
java-native-interface
【解决方案2】:
像这样设置你的相机方向
private int compensateCameraRotation(int uiRotation) {
int currentDeviceOrientation = 0;
switch (uiRotation) {
case (Surface.ROTATION_0):
currentDeviceOrientation = 0;
break;
case (Surface.ROTATION_90):
currentDeviceOrientation = 270;
break;
case (Surface.ROTATION_180):
currentDeviceOrientation = 180;
break;
case (Surface.ROTATION_270):
currentDeviceOrientation = 90;
break;
default:
break;
}
当你初始化你的相机时,你可以这样设置
Camera.Parameters parameters = camera.getParameters();
parameters.setRotation(compensateCameraRotation(currentDisplay
.getRotation()));
currentDisplay 是显示的对象,你可以通过调用得到它
WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
currentDisplay = windowManager.getDefaultDisplay();
像这样设置你的相机属性我最近遇到了同样的问题,我可以通过设置这样的属性来解决它。