Я работаю над проектом, в котором мы должны распознавать пузыри как часть экзамена. Мы тестировали различные подходы к съемке изображений в зависимости от требований (нам нужно наложить фигуры на прямую трансляцию с камеры), и ниже приведены результаты.
Как мы видим, при извлечении изображений непосредственно из Fotoapparat обнаружение хитрости работает намного лучше, чем реализация OpenCV. Я пытался отрегулировать разрешение камеры (путем расширения JavaCameraView) среди многих других вещей, но ни одна из них, похоже, не работает, захваты OpenCV всегда работают плохо.
Кто-нибудь может указать мне правильное направление для захвата одного из кадров из OpenCV с максимально возможным разрешением, доступным для телефона?
Заранее спасибо :)
РЕЗУЛЬТАТЫ:
OpenCV - сырой ROI
OpenCV - Canny преобразование на ROI
Fotoapparat - Сырой ROI (сжатый 31%, чтобы я мог загрузить)
Фотоаппарат - Canny трансформация на ROI
Я наконец-то понял!
То, что происходило, было то, что при попытке извлечь кадр из 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)
}