Разрешение захваченного изображения OpenCV против фотоаппарата

1

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

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

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

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

РЕЗУЛЬТАТЫ:

OpenCV - сырой ROI

Изображение 174551

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

Изображение 174551

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

Изображение 174551

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

Изображение 174551

Теги:
opencv
edge-detection
resolution

1 ответ

0
Лучший ответ

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

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

Решение состояло в том, чтобы реализовать 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)
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню