在OpenCV for Android上使用onCameraFrame捕获高分辨率帧?

时间:2015-04-17 11:26:11

标签: android opencv image-processing google-glass opencv4android

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

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

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

Distorted image

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

1 个答案:

答案 0 :(得分:2)

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

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

Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(30000, 30000);
camera.setParameters(params);