1

我正在尝试使用适用于 Android 的 OpenCV 2.4.10 从一对 Google Glass 中的相机捕获高分辨率帧 (1280x720)。我已经CameraBridgeViewBase.CvCameraViewListener2在我的 Activity 中实现了,并尝试在onCameraFrame方法中抓取框架。到目前为止一切正常,我得到了一个 512x288 Mat 对象。

我的问题是 512x288 分辨率不足以满足我的需要。因此,我尝试以与 OpenCV 后面的示例 3 中相同的方式设置我的项目:http: //goo.gl/iDyqQj。问题是它只适用于低于 512x288 的分辨率,只要我将分辨率提高到这个水平以上,它就会默认恢复为 512x288(没有任何通知)。

我发现了一些建议, http: //goo.gl/X2wtM4,OpenCV将帧大小限制为屏幕分辨率的最大值。但谷歌眼镜的屏幕应该有 640x360 的分辨率?我尝试按照答案中的描述进行操作,但是当我覆盖calculateCameraFrameSize并返回大于 512x288 的 Size-object 时,我得到了一个扭曲的框架(但尺寸更大,见下文)。

扭曲的图像

有人对如何使用 OpenCV 在 Google Glass 上捕获更高的分辨率有任何建议吗?

4

1 回答 1

2

所以我找到了解决方案。这似乎是两个不同的问题。正如我在我的问题中所想的那样,您需要calculateCameraFrameSize在 JavaCameraView 中进行覆盖才能获取比设备屏幕更高的分辨率onCameraFrame。这显然是 OpenCV 的设计选择,并且从 2.4.5 版本开始。所以这就是为什么我无法获得更高分辨率的帧。

即使我现在可以获得更高分辨率的帧,但对于大多数预览尺寸,它仍然会失真。这是 GDK 中的一个错误,似乎已经有一段时间了(如果我理解正确的话,自 XE10 以来),但仍未修复。幸运的是有一个解决方法!setPreviewFpsRange通过在获取相机后手动设置预览的 FPS 可以避免该问题。

Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(30000, 30000);
camera.setParameters(params);
于 2015-04-20T13:57:18.223 回答