gpt4 book ai didi

android - 正确定位原始相机数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:19 25 4
gpt4 key购买 nike

我的相机应用程序使用 OpenCV 处理来自 onPreviewFrame() 的原始相机帧,然后将它们显示在屏幕上。然而,原始帧的方向与相机在手机上的安装方式相同,通常不是正面朝上。为了解决这个问题,我使用 OpenCV 手动旋转它们,这很耗时。

我研究过使用 setDisplayOrientation ,但文档指出

This does not affect the order of byte array passed in onPreviewFrame

而且我需要数据实际是正面朝上的,而不仅仅是正面朝上显示。如何正确定位原始相机数据?如果这是不可能的,我能否有效地旋转在 onPreviewFrame() 中传递给我的字节数组,比如使用 OpenGL?

最佳答案

不,没有办法让 API 为您执行此操作,但要弄清楚您需要如何轮换数据,请查看示例代码 Camera.Parameters.setRotation .虽然 setRotation() 仅影响 JPEG,但您希望对在 onPreviewFrame() 中获得的数据应用与对 JPEG 应用完全相同的旋转量。

在此处复制示例代码,稍作更改:

public void onOrientationChanged(int orientation) {
if (orientation == ORIENTATION_UNKNOWN) return;
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
orientation = (orientation + 45) / 90 * 90;
int rotation = 0;
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
rotation = (info.orientation - orientation + 360) % 360;
} else { // back-facing camera
rotation = (info.orientation + orientation) % 360;
}
mCameraOrientation = rotation; // Store rotation for later use
}

...

void onPreviewFrame(byte[] data, Camera camera) {
switch(mCameraOrientation) {
case 0:
// data is correctly rotated
break;
case 90:
// rotate data by 90 degrees clockwise
case 180:
// rotate data upside down
case 270:
// rotate data by 90 degrees counterclockwise
}
}

所以你需要像上面那样继承OrientationEventListener并覆盖onOrientationChanged,然后使用从那里计算出的方向值来旋转预览帧。

关于android - 正确定位原始相机数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225053/

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