Estoy tratando de crear una aplicación de Android que procesará los marcos de la cámara en tiempo real. Para comenzar, solo quiero mostrar una versión en escala de grises de lo que ve la cámara. Logré extraer los valores apropiados de la matriz de bytes en el método onPreviewFrame
. A continuación se muestra sólo un fragmento de mi código:Procesamiento de marcos de cámara Android en tiempo real
byte[] pic;
int pic_size;
Bitmap picframe;
public void onPreviewFrame(byte[] frame, Camera c)
{
pic_size = mCamera.getParameters().getPreviewSize().height * mCamera.getParameters().getPreviewSize().width;
pic = new byte[pic_size];
for(int i = 0; i < pic_size; i++)
{
pic[i] = frame[i];
}
picframe = BitmapFactory.decodeByteArray(pic, 0, pic_size);
}
Los primeros [width*height]
valores de la matriz del marco byte[]
son los valores de luminancia (escala de grises). Una vez que los he extraído, ¿cómo los visualizo en la pantalla como una imagen? No es una matriz 2D también, entonces, ¿cómo puedo especificar el ancho y la altura?
¿Esto sucede para convertir la imagen YUV en un mapa de bits con un JPEG intermediario? Apenas una solución factible en tiempo real – Rekin
Recomiendo encarecidamente que no lo haga. OpenCV en Android agregará complejidad al proyecto y también requerirá las bibliotecas nativas que tienen un tamaño de alrededor de 10 MB. Android tiene todas las facilidades para lograr lo que el OP requiere. OpenCV es una gran biblioteca, pero excesiva para esta situación. – protectedmember