Samoth Skrevet 8. februar 2008 Del Skrevet 8. februar 2008 Jeg har et bilde som jeg skal scanne for pixler, jeg har søkt ganske mye nå, men jeg finner ingenting, kan noen hjelpe? Jeg vil scanne bildet etter farge på pixelen, altså jeg sier hva slags farge som skal scannes etter, og jeg får melding om hvilke pixler som har en fargen. Lenke til kommentar
Mr Burns Skrevet 8. februar 2008 Del Skrevet 8. februar 2008 Jeg har et bilde som jeg skal scanne for pixler, jeg har søkt ganske mye nå, men jeg finner ingenting, kan noen hjelpe? Jeg vil scanne bildet etter farge på pixelen, altså jeg sier hva slags farge som skal scannes etter, og jeg får melding om hvilke pixler som har en fargen. Akkurat som find() i Matlab altså? Er det gråtone eller RGB-bilder? Jeg har lagt ved litt kode som gjør et bilde om fra farge til gråtone, som blir lagret i et int-array. Det er mye raskere å jobbe med enn GetPixel(). Kan sikkert lett fikses slik at den returnere en 3D array istedenfor en 2D-array. Det kan gjøre er å søke gjennom hele bildet piksel for piksel, ved hjelp av to for-løkker og så bruke GetPixel(x,y) på bildet. Så sammenligner du det du får ut av getpixel med det du leter etter, og hvis det er samme farge, lagrer du x og y i en Liste eller noe. Dette vil gå ganske langsomt, fordi getpixel låser og låser opp hver eneste pixel. Derfor er det raskere å låse hele bildet, lese det ut til en array eller tre, og så låse bildet opp igjen. Så kan man gjøre all slags bildebehandling på arrayene. Søk litt rundt på BitmapData, så vil du sikkert finne opprinnelsen til koden under. private double[,] image2array(Bitmap bi) { Size s = bi.Size; double[,] arr = new double[s.Width, s.Height]; //MessageBox.Show(bi.PixelFormat.ToString()); BitmapData bitmapData1 = bi.LockBits(new Rectangle(0, 0, bi.Width, bi.Height), ImageLockMode.ReadOnly, bi.PixelFormat); int a = 0; unsafe { byte* imagePointer1 = (byte*)bitmapData1.Scan0; for (int i = 0; i < bitmapData1.Height; i++) { for (int j = 0; j < bitmapData1.Width; j++) { // convert RGB to GREY-Scale a = (imagePointer1[0] + imagePointer1[1] + imagePointer1[2]) / 3; arr[j, i] = a; //4 bytes per pixel imagePointer1 += 3; }//end for j //4 bytes per pixel imagePointer1 += bitmapData1.Stride - (bitmapData1.Width * 3); }//end for i }//end unsafe bi.UnlockBits(bitmapData1); return arr; Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå