Foros del Web » Programando para Internet » Android »

Procesamiento de imágenes en android

Estas en el tema de Procesamiento de imágenes en android en el foro de Android en Foros del Web. Saludos gente, ya tiene rato que no venia por estos lados; acabo de regresar a clases y puros exámenes pendientes y la tesis en camino ...
  #1 (permalink)  
Antiguo 02/08/2011, 21:53
Avatar de zero_master  
Fecha de Ingreso: junio-2011
Ubicación: Leon, Gto
Mensajes: 290
Antigüedad: 13 años, 4 meses
Puntos: 74
Procesamiento de imágenes en android

Saludos gente, ya tiene rato que no venia por estos lados; acabo de regresar a clases y puros exámenes pendientes y la tesis en camino , pero bueno aun así aquí estamos.

Me gustaría saber a cuantas personas les gustaría empezar con un mini grupito haciendo publicaciones sobre procesamiento de imágenes en android, algo así como tener una aplicación en baja escala de las funciones clásicas de algunos programas comerciales de manipulación de imágenes.

Para iniciar ya hice algunas aplicaciones en este foro sobre la lectura del RGB de una imagen si necesitan ayuda digan por favor y les explicare mas detalladamente ya que es parte de mi vida el procesamiento de imágenes en mi maestría.

Empezare con enseñarles como cambiar una imagen normal que tengamos por ahí y le cambiaremos a una escala de grises. Para entender como se hace ese cambio debemos sacar sus valores RGB de una imagen y manipularlos para cambiarlo a un tono gris; ya se que existen otras maneras de hacer los cambios por manipulación de funciones en android pero aquí quiero explicarles desde el punto de vista como dice mi asesor "caminando descalzo".

Existe una ecuación muy particular que usaremos:
Cita:
(0.299*r + 0.587*g + 0.114*b)
Las variables r, g y b son los valores de los canales correspondientes para la escala en Rojo, Verde y Azul; juntos crean la gama de colores que se conocen y por lo mismo si los manipulamos con dicha ecuación podremos sacar un resultado que sera como un promedio de los 3 canales. Pero!!! solo tenemos un resultados y 3 canales por llenar lo que hace falta es copiar ese resultados en los 3 canales y nuestra imagen quedara en una tonalidad gris.

Empecemos con el código de inicio (librerías cargadas):
Cita:
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
El main.xml quedaría de esta forma:
Cita:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/tex"
/>
<ImageView
android:layout_width="wrap_content"
android:src="@drawable/icon"
android:id="@+id/Image"
android:layout_height="wrap_content"></ImageView>
<Button
android:text="GrayScale"
android:id="@+id/Butt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
Al inicio de nuestro activity podemos cargar las variables que vamos a usar yo las definí de la siguiente manera:
Cita:
Bitmap Imag; ImageView view; Button But; TextView text;
int picw, pich;
int pix[];
De donde:
Imag = Nuestra variable donde tendremos nuestra imagen cargada.
view = Donde cargaremos nuestra imagen modificada.
But = Nuestro boton.
text = Nuestro texto a desplegar.
picw = La variable donde cargaremos la dimensión de nuestra imagen en Width.
pich = La variable donde cargaremos la dimensión en Heigth.
pix[] = La variable donde estaremos guardando los valores de los pixeles.

Después de eso llenamos nuestras respectivas variables de la siguiente manera:
Cita:
Imag = BitmapFactory.decodeResource(getResources(), R.drawable.rgb);
picw = Imag.getWidth(); pich = Imag.getHeight();
view = (ImageView)findViewById(R.id.Image);
But = (Button)findViewById(R.id.Butt);
view.setImageBitmap(Imag);
text = (TextView)findViewById(R.id.tex);
pix = new int[picw*pich];
Después de tenerlas llenas con los valores a manipular crearemos un setOnClickListener a nuestro boton. Donde tendremos nuestra función GrayScale que cambiara nuestros valores de pix[] y desplegarlos en el view. Dentro del mismo evento también crearemos un nuevo Bitmap para no modificar nuestra imagen original solo por seguridad; de esta manera:
Cita:
Bitmap bm = Bitmap.createBitmap(picw, pich, Bitmap.Config.ARGB_4444);
Nuestra función que va a hacer el cambio a escala de grises lo declaramos del siguiente modo:
Cita:
public int[] GrayScale(Bitmap mBitmap)
{
int picw, pich;
picw = mBitmap.getWidth();
pich = mBitmap.getHeight();
int[] pix = new int[picw * pich];
mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
for (int y = 0; y < pich; y++)
for (int x = 0; x < picw; x++)
{
int index = y * picw + x;
int r = (pix[index] >> 16) & 0xff;
int g = (pix[index] >> 8) & 0xff;
int b = pix[index] & 0xff;
int R = (int)(0.299*r + 0.587*g + 0.114*b);
pix[index] = 0xff000000 | (R << 16) | (R << 8) | R;
}
return pix;
}

Aquí nuestra función recibe un Bitmap, sacamos sus valores de pixeles, leemos el RGB y aplicamos la ecuación que dijimos al inicio, guardamos de nuevo en la variable pix y cuando termine de leer todo lo que contiene pix lo regresamos.

De nuevo en nuestro evento del boton solo nos queda leer lo regresado y llenar nuestra nueva imagen con los pixeles modificados de la función.
Cita:
pix = GrayScale(Imag);
bm.setPixels(pix, 0, picw, 0, 0, picw, pich);
view.setImageBitmap(bm);
view.invalidate();
Y listooo!!! aquí esta la clásica imagen de muestra del resultado espero les sirva y comenten o mínimo dejen algo de puntos jeje.

  #2 (permalink)  
Antiguo 10/11/2011, 22:02
 
Fecha de Ingreso: septiembre-2011
Ubicación: Puebla,Puebla
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Procesamiento de imágenes en android

Hola me gusto tu proyecto me ha sido de gran ayuda, pero aun no logro que procese la imagen por que tengo problemas con el onClickistsner, no se si tengas el proyecto completo para que pueda checar, o si me puedes ayudar te lo agradeceria.
  #3 (permalink)  
Antiguo 10/11/2011, 22:48
Avatar de zero_master  
Fecha de Ingreso: junio-2011
Ubicación: Leon, Gto
Mensajes: 290
Antigüedad: 13 años, 4 meses
Puntos: 74
Respuesta: Procesamiento de imágenes en android

El OnClickListener no lo estoy usando jeje, es que reutilice un proyecto que tenia donde leia el RGB de la imagen donde le hacia Touch, voy a empezar a hacer un tutorial desde 0 segun me lo habian pedido en el foro pero nunca me dieron luz verde para hacerlo en PDF y pues me canse de esperar asi que mejor iniciare de nuevo. Si quieres mas tarde subo mis .apk para que prueben lo que se vendra despues tengo una version mas avanzada de procesamiento de imagenes.
  #4 (permalink)  
Antiguo 12/11/2011, 00:11
 
Fecha de Ingreso: septiembre-2011
Ubicación: Puebla,Puebla
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Procesamiento de imágenes en android

Muchas gracias zero_master lo que pasa es que estoy en mi proyecto de tesis y tengo problema como te comente en el onClickListener y logro que los filtros funcionen, al agregar las funciones de los filtros, no se si tengas algo que me pueda orientar, te lo agradeceria mucho.
  #5 (permalink)  
Antiguo 12/11/2011, 00:19
Avatar de zero_master  
Fecha de Ingreso: junio-2011
Ubicación: Leon, Gto
Mensajes: 290
Antigüedad: 13 años, 4 meses
Puntos: 74
Respuesta: Procesamiento de imágenes en android

Quieres libros de Java en procesamiento de imagenes o quieres libros de Android que sean de gran utilidad? jejeje tambien ando usando android para mi tesis de maestria, talvez podamos hablar mejor por correo por si tienes muchas dudas y asi quien quite nos ayudamos entre los dos.... puedes buscarme en twitter como EmmanuelZ3r0 y puedes encontrarme via correo por [email protected]
  #6 (permalink)  
Antiguo 15/11/2011, 22:54
 
Fecha de Ingreso: octubre-2011
Mensajes: 12
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Procesamiento de imágenes en android

hola, no se si me recuerdas, soy la molestona del gesto pellizco ñ_ñ , eh leido la mayoria de los tutoriales q has dejado por aqui y la vdd estoy muy interesada, no se si te moleste q tambn te pueda contactar por correo ya q tambn me encuentro realizando mi tesis de licenciatura y aun tengo muchas dudas sobre imagenes... saludos =)
  #7 (permalink)  
Antiguo 15/11/2011, 23:46
Avatar de zero_master  
Fecha de Ingreso: junio-2011
Ubicación: Leon, Gto
Mensajes: 290
Antigüedad: 13 años, 4 meses
Puntos: 74
Respuesta: Procesamiento de imágenes en android

jaja ya te agrege en el twitter, ya me di cuenta que varios andan en su tesis jajaja yo ni entrego la mia y ya toy por salir de mi maestria hmm sera que les ayudo o sera que no jajaja bromeo claro no hay problem
  #8 (permalink)  
Antiguo 28/03/2012, 13:47
Avatar de cocu3  
Fecha de Ingreso: diciembre-2007
Mensajes: 235
Antigüedad: 16 años, 11 meses
Puntos: 6
Respuesta: Procesamiento de imágenes en android

hola,

esta buena la idea, si aun estas armando grupo de trabajo me apunto
en cuanto a rendimiento como es el tema, es decir se debe demorar un resto cambiando todo el bitmap cierto??

saluds
__________________
editor de fotos

Etiquetas: rgb, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 9 personas




La zona horaria es GMT -6. Ahora son las 12:28.