【问题标题】:How to set camera resolution in Android with OpenCV?如何使用 OpenCV 在 Android 中设置相机分辨率?
【发布时间】:2012-08-24 07:21:36
【问题描述】:

我正在尝试为 Android 开发一个应用程序,我需要从相机中获取分辨率尽可能高的未压缩图片。我尝试了 takePicture 的 rawCallback 和 postviewCallback,但它们都不起作用。

现在我正在尝试使用 VideoCapture 使用 OpenCV(2.4 版),但我被困在默认的 960x720 中,这对我的需要来说很差;而我的手机,三星 Galaxy S3,理论上能够提供高达 8Mpx(图片为 3,264×2,448,视频为 1,920×1,080,根据维基百科)。 VideoCapture.set(Highgui.CV_CAP_PROP_FRAME_WIDTH/HEIGHT, some number) 使相机返回我发现的黑色图像。

有没有什么方法可以在不压缩的情况下通过 OpenCV 或 Android API 获得更高的分辨率?

如果之前有人问过这个问题,我真的很抱歉;我找了好几天,一无所获。

感谢您的宝贵时间!

编辑:虽然这不是我要问的,但我发现有一种方法可以做非常相似的事情:如果您为相机设置 OnPreviewCallback,使用 setPreviewCallback,您确实会从相机获取原始图片数据(至少在我正在使用的 S3 中)。我把它留在这里,以防将来有人发现它有用。

编辑:在下面的答案中解释了部分解决方案。总结一下,

vc.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, desiredFrameWidth);
vc.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, desiredFrameHeight);

在某些条件下工作;详情请见下文。

【问题讨论】:

    标签: android opencv camera resolution


    【解决方案1】:

    您必须通过调用getSupportedPreviewSizes 来获得支持的相机预览结果。

    在此之后,您可以使用方法setPreviewSize 设置任何分辨率。最后别忘了setParameters。实际上,许多 OpenCV Android 示例都包含此信息(查看 sample3)。

    【讨论】:

      【解决方案2】:

      如果有人发现这很有用,我找到了一个(部分)解决方案:如果您的 VideoCapture 变量被称为 vc,这应该可以工作:

      vc.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, desiredFrameWidth);
      vc.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, desiredFrameHeight);
      

      请注意,宽度和高度的组合必须是您的相机支持的图片格式之一,否则只会得到黑色图像。您可以通过 Camera.Parameters.getSupportedPictureSizes() 获得这些。

      但是,设置高分辨率似乎超出了 YUV 转换缓冲区的容量,所以我仍在为此苦苦挣扎。我将为此提出一个新的单独问题,以使一切更清楚:new thread

      【讨论】:

        【解决方案3】:

        setPreviewSize 不设置图片分辨率。 setPictureSize 可以。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-04
          • 1970-01-01
          • 2014-09-12
          • 2014-01-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多