Come applicare, la conversione di immagini da colore a scala di grigi algoritmo di Android?

StackOverflow https://stackoverflow.com/questions/4045894

  •  27-09-2019
  •  | 
  •  

Domanda

Sto provando ad usare uno di questi algoritmi per convertire un'immagine RGB in scala di grigio:

  

Il metodo medie leggerezza i colori più importanti e meno importanti:    (Max (R, G, B) + min (R, G, B)) / 2.

     

Il metodo media semplicemente medie dei valori:. (R + G + B) / 3

     

La formula di luminosità è 0.21 R + G + 0.71 0.07 B.

Ma ottengo risultati molto strani! So che ci sono altri modi per raggiungere questo obiettivo, ma è possibile farlo in questo modo?

Ecco il codice:

for(int i = 0 ; i < eWidth*eHeight;i++){
        int R = (pixels[i] >> 16) ;     //bitwise shifting
        int G = (pixels[i] >> 8) ;
        int B = pixels[i] ;
        int gray = (R + G + B )/ 3 ;
        pixels[i] = (gray << 16) | (gray << 8) | gray   ;
}
È stato utile?

Soluzione

È necessario togliere i bit che non fanno parte del componente che stai ricevendo, soprattutto se c'è qualche estensione del segno in corso nei turni.

    int R = (q[i] >> 16) & 0xff ;     //bitwise shifting 
    int G = (q[i] >> 8) & 0xff ; 
    int B = q[i] & 0xff ; 

Altri suggerimenti

Che cosa hai fatto sguardi Allright a me ..

Una volta ho fatto questo, in java, più o meno allo stesso modo. Ottenere la media dei valori 0-255 colore di RGB, per ottenere in scala di grigi, e sembra un sacco come la tua.

public int getGray(int row, int col) throws Exception
{
     checkInImage(row,col);
     int[] rgb = this.getRGB(row,col);
     return  (int) (rgb[0]+rgb[1]+rgb[2])/3;
}

ho capito che non state chiedendo zappa per il codice, ma per l'algoritmo?

Non v'è alcun algoritmo "corretto" come da http://www.dfanning.com/ip_tips /color2gray.html

Usano

Y = 0.3*R + 0.59*G + 0.11*B

Si può certamente modificare ogni pixel in Java, ma questo è molto inefficiente. Se si ha la possibilità, vorrei utilizzare un ColorMatrix. Vedere la documentazione di Android per i dettagli: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html

È possibile impostare la' saturazione della matrice a 0 per renderlo scala di grigi.

Se si vuole veramente farlo in Java, è possibile farlo nel modo avete fatto, ma avrete bisogno di mascherare ogni elemento prima, vale a dire applicare & 0xff ad esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top