Cómo configurar la resolución de la cámara en Android con OpenCV?

Estoy tratando de desarrollar una aplicación para Android, y tendría que obtener imágenes sin comprimir con una resolución lo más alta posible de la cámara. He intentado rawCallback de takePicture y postviewCallback, pero no funcionan.

Ahora estoy intentando con OpenCV (versión 2.4) usando VideoCapture, pero estoy atascado en el 960×720 predeterminado, que es pobre para lo que necesito; Y mi teléfono, un Samsung Galaxy S3, es capaz de proporcionar, en teoría, hasta 8Mpx (3,264 × 2,448 para las imágenes, y 1,920 × 1,080 para el vídeo, según Wikipedia). VideoCapture.set (Highgui.CV_CAP_PROP_FRAME_WIDTH / HEIGHT, algunos números) hace que la cámara devuelva una imagen negra hasta donde he encontrado.

¿Hay alguna manera de obtener una resolución más alta, ya sea a través de OpenCV o con la API de Android, sin comprimir?

Lo siento mucho si esto se ha pedido antes; He estado buscando días y no he encontrado nada.

¡Gracias por tu tiempo!

EDIT: Aunque no es exactamente lo que estaba pidiendo, he encontrado que hay una manera de hacer algo muy similar: si se establece un OnPreviewCallback para la cámara, utilizando setPreviewCallback, obtendrá los datos de imagen sin procesar de la cámara (al menos En el S3 estoy trabajando con). Lo dejo aquí en caso de que alguien lo encuentre útil en el futuro.

EDIT: Una solución parcial se explica en una respuesta a continuación. Para resumir,

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

Trabaja bajo ciertas condiciones; Vea a continuación para más detalles.

Usted tiene que obtener resoultions de vista previa de la cámara llamando a getSupportedPreviewSizes .

Después de esto, puede establecer cualquier resolución con el método setPreviewSize . Y no te olvides de setParameters al final. De hecho, muchos ejemplos de OpenCV Android contienen esta información (mira sample3).

En caso de que alguien encuentre esto útil, encontré una solución (parcial): Si su variable VideoCapture se llama vc, esto debería funcionar:

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

Tenga en cuenta que la combinación de ancho y altura debe ser uno de los formatos de imagen compatibles para su cámara, de lo contrario sólo obtendrá una imagen en negro. Puede obtener a través de Camera.Parameters.getSupportedPictureSizes ().

Sin embargo, la configuración de una alta resolución parece superar la capacidad del buffer de conversión YUV, por lo que todavía estoy luchando con eso. Voy a hacer una nueva pregunta separada para que, para mantener todo claro: nuevo hilo

SetPreviewSize no establece la resolución de imagen. SetPictureSize hace.

  • Cómo integrar OpenCV Manager en la aplicación para Android
  • Mejora del rendimiento de OpenCV Android: seguimiento rápido de objetos
  • Cuenca en Opencv Android
  • Android OpenCV: dibujo de partidos con feature2d
  • Detección de color verde Android de OpenCV
  • Android - Detección de funciones de cara
  • Cómo averiguar la cara detectada es real o falsa
  • La importación de Opencv highgui en el androide estudio está mostrando error.Cannot resolver (he añadido la biblioteca sigue siendo el error permanecen)
  • Convertir Mat a Bitmap Opencv para Android
  • Cargando una imagen usando OpenCV en Android
  • OpenCv con Android Studio 2.2+ usando nuevo gradel con cmake - referencia indefinida
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.