PDA

View Full Version : [JAVA] conversione pixels di un immagine da rgb a yuv


antedesk
30-08-2010, 11:18
Per motivi didattici/personali mi sono trovato costretto a dover studiare la gestione delle immagini in java e ad implementare un metodo per la conversione di un immagine dal dominio rgb a yuv e viceversa.
Solo che on line non ho trovato molto :mc: ed inoltre sono un pivello con la gestione delle immagini(è la prima volta che le tocco sotto il punto di vista di programmazione).

vi chiedo quindi un piccolo aiutino :help:

Grazie a tutti per il tempo dedicatomi.

Ciaoooo :D

ps: non vi sto chiedendo il codice, ma qualche suggerimento per farlo :)

banryu79
30-08-2010, 11:56
Per motivi didattici/personali mi sono trovato costretto a dover studiare la gestione delle immagini in java e ad implementare un metodo per la conversione di un immagine dal dominio rgb a yuv e viceversa.

Ciao, hai per caso bisogno di fare la conversione a partire da immmagini catturate (per esempio) dalla web cam? Insomma, stai usando le JMF? Se sì, prova a leggere qui (http://forums.sun.com/thread.jspa?threadID=5368943).

antedesk
30-08-2010, 12:01
Ciao, hai per caso bisogno di fare la conversione a partire da immmagini catturate (per esempio) dalla web cam? Insomma, stai usando le JMF? Se sì, prova a leggere qui (http://forums.sun.com/thread.jspa?threadID=5368943).

Ciao, no parto da immagini salvate sul disco e che devono essere poi elaborate.
come libreria esterna sto usando JAI ma per ciò che riguarda la conversione da rgb a yuv non ha niente di predefinito.

provo a dare un occhiata alla pagina che mi hai dato in modo da vedere se trovo qualcosa di utile.

antedesk
30-08-2010, 12:42
ok ho fatto dei grandi passi avanti, riporto il codice:


public BufferedImage rgb2yuv(BufferedImage bi){
BufferedImage img = null;
Transform tf = new Transform();


int numBands = bi.getSampleModel().getNumBands();
int w= bi.getWidth();
int h=bi.getHeight();

int[] pixelsimmrgb = new int[w*h];
bi.getRGB(0, 0, w, h, pixelsimmrgb,0 ,w );
int[] pixelsimmyuv = new int[w*h];
Color c;

int r,g,b;
int y,u,v;

for(int i1=0; i1<pixelsimmrgb.length;i1++){
c = new Color(pixelsimmrgb[i1]);
r =c.getRed();
g=c.getGreen();
b=c.getBlue();

y = (int)(0.299 * r + 0.587 * g + 0.114 * b);
u = (int)((b - y) * 0.492);
v = (int)((r - y) * 0.877);
c= new Color(y,u,v); //dà errore in runtime perchè il range di g non è rispettato nella conversione alcuni valori sono negativi
}


// img = tf.createBi(bi, numBands, pixelsimmyuv);

return img;
}




solo che dopo aver ottenuto y u v e settato i colori r g b del pixel rispettivamente con quelli calcolati(lo so è abbastanza zozzo come metodo, ma è l'unica cosa che mi è venuta in mente) devo ritornare al pixel in forma numerica in modo da utilizzare il metodo createBi che mi costruisce un immagine a partire dai pixels e dal numBands.

qualche suggerimento?

antedesk
31-08-2010, 14:38
risolto... se a qualcuno interessa mi può contattare per mail ^^ ciao