【问题标题】:OpenCV captured image resolution vs FotoapparatOpenCV 捕获的图像分辨率与 Fotoapparat
【发布时间】:2019-02-20 14:59:03
【问题描述】:

我正在开展一个项目,我们需要在考试中识别气泡。 我们一直在根据需求测试不同的图像拍摄方法(我们需要在实时摄像机流上叠加形状),以下是结果。

正如我们所见,当直接从 Fotoapparat 获取图像时,canny 检测的效果比 OpenCV 实现要好得多。我曾尝试调整相机分辨率(通过扩展 JavaCameraView)以及其他许多方法,但它们似乎都不起作用,OpenCV 捕获总是表现不佳。

谁能指出我从 OpenCV 以手机可用的最高分辨率捕获其中一帧的正确方向?

提前谢谢:)

结果:

OpenCV - 原始投资回报率

OpenCV - ROI 上的 Canny 转换

Fotoapparat - 原始投资回报率(压缩 31%,以便上传)

Fotoapparat - 投资回报率的 Canny 转换

【问题讨论】:

    标签: android opencv resolution edge-detection


    【解决方案1】:

    我终于明白了!

    发生的情况是,当尝试从 OpenCV 的 onCameraFrame 中提取帧时,它默认为很小的分辨率(并受屏幕尺寸影响),因为它有效地截取了当时屏幕上的内容。

    解决方案是在我自己的实现JavaCameraView 的类中实现camera.takePicture(类似于问题here 中显示的那个),在拍照之前,选择设备上可用的最高分辨率.

    代码如下:

        fun takePic(jpgCallback: Camera.PictureCallback) {
            val params = mCamera.parameters
            params.jpegQuality = 100 //doesn't hurt to be sure
    
            val supportedSizes = params.supportedPictureSizes
            if (supportedSizes.isNullOrEmpty().not()) {
                var w = 0
                var h = 0
                for (size in supportedSizes) {
                    if (size.width > w || size.height > h) {
                        w = size.width
                        h = size.height
                    }
                }
    
                Log.e("----", "Using largest supported size... w: $w // h: $h")
                params.setPictureSize(w, h)
            }
            mCamera.parameters = params
            mCamera.takePicture(null, null, jpgCallback)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2021-03-02
      • 2013-04-29
      • 1970-01-01
      相关资源
      最近更新 更多