我正在尝试使用适用于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时,我得到一个扭曲的框架(但尺寸较大,见下文)。
是否有人建议如何使用OpenCV在Google Glass上捕获更高的捕获分辨率?
答案 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);