Разрешение захваченного изображения OpenCV против фотоаппарата - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю над проектом, в котором мы должны распознавать пузыри как часть экзамена.Мы тестировали различные подходы к съемке изображений в зависимости от требований (нам нужно наложить фигуры на прямую трансляцию с камеры), и ниже приведены результаты.

Как мы видим, когда снимаем изображения непосредственно из фотоаппарата,обнаружение хитрости работает намного лучше, чем реализация OpenCV.Я пытался отрегулировать разрешение камеры (путем расширения JavaCameraView) среди многих других вещей, но ни одна из них, кажется, не работает, захваты OpenCV всегда работают плохо.

Может ли кто-нибудь указать мне правильное направление для захвата одного изкадры из OpenCV с максимально возможным разрешением, доступным для телефона?

Заранее спасибо :)

РЕЗУЛЬТАТЫ:

OpenCV -Необработанный ROI

enter image description here

OpenCV - преобразование Canny по ROI

enter image description here

Фотоаппарат - сырой ROI (сжато на 31%, чтобы я мог загрузить)

enter image description here

Фотоаппарат - Кэнни-трансформация на ROI

enter image description here

1 Ответ

0 голосов
/ 21 февраля 2019

Я наконец понял это!

То, что происходило, было то, что при попытке извлечь кадр из onCameraFrame OpenCV он по умолчанию имел крошечное разрешение (и зависело от размера экрана), так как он эффективно делал снимок экрана того, что было на экране ввремя.

Решением было реализовать camera.takePicture в моем собственном классе, который реализовал JavaCameraView (аналогично показанному в вопросе здесь ), и перед съемкой выберитемаксимально возможное разрешение доступно на устройстве.

Код выглядит следующим образом:

    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)
    }
...