OpenCV 中的 setPreviewSize

setPreviewSize in OpenCV

我正在开发一个 Android 应用程序,它使用 OpenCV 3.1.0 并显示相机预览。最初,我们调用 setMaxFrameSize(640, 480),因为所需的处理很繁重,我们不需要相机提供的最佳视频质量。该应用程序在除客户 phone 以外的所有设备上都能正常运行。经典故事吧?

确切的问题是,即使我们将最大帧大小明确设置为 640 x 480,但在他的设备 (Samsung J3) 上,分辨率将为 1280 x 720。

我查看了来自 OpenCV 的 JavaCameraView 文件并调用了 getSupportedPreviewSizes。 640 x 480 在该列表中。一切正常,我们设置了几个参数,最后我们调用 mCamera.setParameters(params);

class 中的下一行是:params = mCamera.getParameters();

设置参数时,params.getPreviewSize() = 640 x 480。 调用 mCamera.getParameters() 后,params.getPreviewSize() 将为 1280 x 720。并且它仅在该设备上重现。

我已经在 Nexus 6P、三星 S6、三星平板电脑和几台 phone 上测试了该应用程序,一切正常,分辨率为 640 x 480。但在三星 J3 上,无论分辨率如何m 设置,相机将显示 1280 x 720 帧。

谢谢!

更新:2 天后。没有找到任何解决方案。

这不是唯一存在相机预览尺寸错误的设备。参见例如setPreviewSize does not work on Nexus 5 kitkat, also https://issuetracker.google.com/issues/36982218 and https://bugs.chromium.org/p/webrtc/issues/detail?id=4197.

J3设备是运行5.1.1 (Lollipop),所以它应该支持新的camera2API,见.也许错误已在 camera2 API.

中修复

实际上,J3 并没有那么糟糕,至少它会在您调用 Camera.getParameters() 时报告真实大小。我们有一个硬编码的 'black list' 设备没有正确显示它们的参数,并且每次我们的一个客户出现问题时都会更新它。名单很长 ;)