Mendapatkan Nilai RGB dalam Satu Pixel Citra


Dalam Image Processing, untuk melakukan proses binarisasi, filtering data, dan lain-lain, akan dibutuhkan informasi tentang nilai pixel dari suatu citra. Posting ini akan memberikan contoh program dengan menggunakan java, untuk mendapatkan nilai RGB dari satu pixel pada citra.

import java.io.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

public class GetPixelColor
{
	public static void main(String args[]) throws IOException{
		File file= new File("smile.jpg");
		BufferedImage image = ImageIO.read(file);
		// Getting pixel color by position x=100 and y=40
		int clr=  image.getRGB(100,40);
		int  red = (clr & 0x00ff0000) >> 16;
		int  green = (clr & 0x0000ff00) >> 8;
		int  blue = clr & 0x000000ff;
		System.out.println("Red Color value = "+ red);
		System.out.println("Green Color value = "+ green);
		System.out.println("Blue Color value = "+ blue);
	}
}

Note: silahkan ganti nama file citra yang akan digunakan nanti, dan pastikan citra tersebut ada dalam satu directori dengan program ini.

Posting ini tulisan ulang dari rose india.

About windupurnomo

I'm interested in programming. I am active with several programming such as Java, C #, C, JavaScript, HTML. I'm also develop desktop application (Java Swing), Mobile Application (Android), and Web programming (ASP MVC).
This entry was posted in Image Processing and tagged , , , , . Bookmark the permalink.

8 Responses to Mendapatkan Nilai RGB dalam Satu Pixel Citra

  1. meta says:

    mas, mau nanya nih.. image processing yg saya buat, satu image saya deteksi masing2 R, G, dan B nya, yaitu seperti berikut:

    process_red = new int[width * height];
    counter = 0;
    for(int i = 0; i < 256; i++)
    {
    for(int j = 0; j > 16;
    red = (0xFF <<24)|(red<<16)|(red<<8)|red;
    process_red[counter] = red;
    counter++;
    }
    }

    process_green = new int[width * height];
    counter = 0;
    for (int i = 0; i < 256; i++)
    {
    for(int j = 0; j > 8;
    green = (0xFF <<24)|(green<<16)|(green<<8)|green;
    process_green[counter] = green;
    counter++;
    }
    }

    process_blue = new int[width * height];
    counter = 0;
    for(int i = 0; i < 256; i++)
    {
    for(int j = 0; j < 256; j++)
    {
    int clr = buff_blue.getRGB(j,i);
    int blue = clr & 0x000000ff;
    blue = (0xFF <<24)|(blue<<16)|(blue<<8)|blue;
    process_blue[counter] = blue;
    counter++;
    }
    }

    kemudian, setelah itu 3-3 nya harus saya gabungkan lagi. boleh dibantu ngga mas, gimana cara menggabungkan ketiganya? terima kasih banyak sebelumnya.

  2. meta says:

    koreksi utk red elemen:

    process_red = new int[width * height];
    counter = 0;
    for(int i = 0; i 16; j++
    {
    red = (0xFF <<24)|(red<<16)|(red<<8)|red;
    process_red[counter] = red;
    counter++;
    }
    }

    • windupurnomo says:

      hmmm… Saya belum mengerti betul dengan pertanyaan yang dimaksud. Klo boleh saya menebak :D, kamu ingin mengambil nilai Red, Green dan Blue dari citra utuh. Klo itu yang dimaksud, baru saja sy buat tulisan di sini: https://windupurnomo.wordpress.com/2011/01/08/mendapatkan-nilai-rgb-dalam-citra/

      • meta says:

        terima kasih mas utk responnya. hmmm… maksud pertanyaan saya lebih tepatnya menghitung frequensi red, green, dan blue. jadi dr citra utuh akan muncul 3 citra dimana:
        citra 1 terdiri dari red elemen saja
        citra 2 terdiri dari green elemen saja
        citra 3 terdiri dari blue elemen saja
        untuk kemudian masing2 citra tersebut diberi nilai threshold dan diaplikasi proses binarisasi utk mendapat tepi2 citra. setelah ketiga citra didapatkan tepinya, 3 binari citra tersebut akan digabung untuk mendapatkan 1 binary citra saja. sejauh ini saya rasa yg saya lakukan sudah benar, hanya saja saya mengalami masalah untuk display citra yg terakhir (setelah proses penggabungan). kalo mas tidak keberatan boleh tolong di-cek mas dimana kekurangan yg membuat citra tsb tidak bisa dimunculkan http://www.daniweb.com/forums/post1435970.html#post1435970. terima kasih banyak sebelumnya.

  3. hana says:

    mas,,saya d tlongin yah….sy menggunakn aplikasi TCS 230 sebagai sensor warna n sy trmasuk msh baru mnggunkn TCS 230 n bru mo bljr,,yg sy mo tnykn gmn cr membwt programx kbtuln sy mnggunkn BHS C n sy udh mndptkn nilai dr frewkuensi msg2 RGB,,sy mndptkn referensi pemrogrmn bhsa c yg mnggunkn bhs c apkh program trsebut jg sm…yaitu sprti brikut:
    016 Chip type : ATmega8535
    017 Program type : Application
    018 Clock frequency : 11.059200 MHz
    019 Memory model : Small
    020 External SRAM size : 0
    021 Data Stack size : 128
    022
    023 S0 dan S1 5 volt
    024 S2=0 ; S3=0 -> filter merah
    025 S2=0 ; S3=1 -> filter biru
    026 S2=1 ; S3=0 -> filter clear
    027 S2=1 ; S3=1 -> filter hijau
    028 *****************************************************/
    029
    030 #include
    031 #include
    032 #include
    033 #define redref (27795/255)
    034 #define greenref (33066.7/255)
    035 #define blueref (34720/255)
    036
    037 // Alphanumeric LCD Module functions
    038 #asm
    039 .equ __lcd_port=0x15 ;PORTC
    040 #endasm
    041 #include
    042
    043 // Declare your global variables here
    044
    045 unsigned char lcd_buffer[33];
    046 unsigned int count, red, green, blue,a=0,b=0,c=0;
    047 float periode, frekuensi;
    048
    049 void red_filter()
    050 {
    051 PORTA.5=0;
    052 PORTA.6=0;
    053 for(a=0; a<=5; a++)
    054 {
    055 while(PINB.1 == 0){}
    056 while(PINB.1 == 1){}
    057 }
    058
    059 while(PINB.1 == 0)
    060 {
    061 count++;
    062 }
    063
    064 while(PINB.1 == 1)
    065 {
    066 count++;
    067 }
    068
    069 periode = ((float)count*0.0000014400921658986175115207373271889);
    070 frekuensi = ((float)1/periode);
    071 red = (frekuensi/redref);
    072
    073 count=0;
    074
    075 }
    076
    077 void green_filter()
    078 {
    079 PORTA.5=1;
    080 PORTA.6=1;
    081 for(b=0; b<=5; b++)
    082 {
    083 while(PINB.1 == 0){}
    084 while(PINB.1 == 1){}
    085 }
    086
    087 while(PINB.1 == 0)
    088 {
    089 count++;
    090 }
    091
    092 while(PINB.1 == 1)
    093 {
    094 count++;
    095 }
    096
    097 periode = ((float)count*0.0000014400921658986175115207373271889);
    098 frekuensi = ((float)1/periode);
    099 green = (frekuensi/greenref);
    100
    101 count=0;
    102
    103 }
    104
    105 void blue_filter()
    106 {
    107 PORTA.5=0;
    108 PORTA.6=1;
    109 for(c=0; c<=5; c++)
    110 {
    111 while(PINB.1 == 0){}
    112 while(PINB.1 == 1){}
    113 }
    114
    115 while(PINB.1 == 0)
    116 {
    117 count++;
    118 }
    119
    120 while(PINB.1 == 1)
    121 {
    122 count++;
    123 }
    124
    125 periode = ((float)count*0.0000014400921658986175115207373271889);
    126 frekuensi = ((float)1/periode);
    127 blue = (frekuensi/blueref);
    128
    129 count=0;
    130
    131 }
    132
    133 void main(void)
    134 {
    135 // Declare your local variables here
    136
    137 // Input/Output Ports initialization
    138 // Port A initialization
    139 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    140 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    141 PORTA=0x00;
    142 DDRA=0xFF;
    143
    144 // Port B initialization
    145 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    146 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    147 PORTB=0x02;
    148 DDRB=0x00;
    149
    150 // Port C initialization
    151 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    152 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    153 PORTC=0x00;
    154 DDRC=0x00;
    155
    156 // Port D initialization
    157 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    158 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    159 PORTD=0x00;
    160 DDRD=0x00;
    161
    162 // Timer/Counter 0 initialization
    163 // Clock source: System Clock
    164 // Clock value: Timer 0 Stopped
    165 // Mode: Normal top=FFh
    166 // OC0 output: Disconnected
    167 TCCR0=0x00;
    168 TCNT0=0x00;
    169 OCR0=0x00;
    170
    171 // Timer/Counter 1 initialization
    172 // Clock source: System Clock
    173 // Clock value: Timer 1 Stopped
    174 // Mode: Normal top=FFFFh
    175 // OC1A output: Discon.
    176 // OC1B output: Discon.
    177 // Noise Canceler: Off
    178 // Input Capture on Falling Edge
    179 // Timer 1 Overflow Interrupt: Off
    180 // Input Capture Interrupt: Off
    181 // Compare A Match Interrupt: Off
    182 // Compare B Match Interrupt: Off
    183 TCCR1A=0x00;
    184 TCCR1B=0x00;
    185 TCNT1H=0x00;
    186 TCNT1L=0x00;
    187 ICR1H=0x00;
    188 ICR1L=0x00;
    189 OCR1AH=0x00;
    190 OCR1AL=0x00;
    191 OCR1BH=0x00;
    192 OCR1BL=0x00;
    193
    194 // Timer/Counter 2 initialization
    195 // Clock source: System Clock
    196 // Clock value: Timer 2 Stopped
    197 // Mode: Normal top=FFh
    198 // OC2 output: Disconnected
    199 ASSR=0x00;
    200 TCCR2=0x00;
    201 TCNT2=0x00;
    202 OCR2=0x00;
    203
    204 // External Interrupt(s) initialization
    205 // INT0: Off
    206 // INT1: Off
    207 // INT2: Off
    208 MCUCR=0x00;
    209 MCUCSR=0x00;
    210
    211 // USART initialization
    212 // Communication Parameters: 8 Data, 1 Stop, No Parity
    213 // USART Receiver: On
    214 // USART Transmitter: On
    215 // USART Mode: Asynchronous
    216 // USART Baud rate: 9600
    217 UCSRA=0x00;
    218 UCSRB=0x18;
    219 UCSRC=0x86;
    220 UBRRH=0x00;
    221 UBRRL=0x23;
    222
    223 // Timer(s)/Counter(s) Interrupt(s) initialization
    224 TIMSK=0x00;
    225
    226 // Analog Comparator initialization
    227 // Analog Comparator: Off
    228 // Analog Comparator Input Capture by Timer/Counter 1: Off
    229 ACSR=0x80;
    230 SFIOR=0x00;
    231
    232 // LCD module initialization
    233 lcd_init(16);
    234
    235 count=0;
    236 PORTA=0b10011000;
    237
    238 while (1)
    239 {
    240 // Place your code here
    241 red_filter();
    242 delay_ms(50);
    243 green_filter();
    244 delay_ms(50);
    245 blue_filter();
    246 delay_ms(50);
    247 lcd_gotoxy(0,0);
    248 lcd_clear();
    249 sprintf(lcd_buffer,"R:%d G:%d B:%d",red,green,blue);
    250 lcd_puts(lcd_buffer);
    251 a=0; b=0; c=0;
    252 };
    253 }

    dn gmn cra memasukn nilai F dr RGBnya???tlong d bles ya mas atas bntuannya sya sngt brtrm ksh blsx gpp d krim d email indy_burex@yahoo.com

  4. irham says:

    Mas mau tanya :
    kenapa klu red itu di slalu shift kanan dengan nilai 16 ??
    int red = (clr & 0x00ff0000) >> 16;

    kenapa klu green itu slalu di shift kanan dengan nilai 8 ??
    int green = (clr & 0x0000ff00) >> 8;

    kenapa klu blue itu tidak di shift kanan ??
    int blue = clr & 0x000000ff;

    Makasih mas..

  5. Wawan says:

    mas,, saya mau tanya mas.. dri koding mas diatas,, saya masih belum mengerti dengan yang ini.
    int red = (clr & 0x00ff0000) >> 16;
    int green = (clr & 0x0000ff00) >> 8;
    int blue = clr & 0x000000ff;
    kira2 maksud dari koding ini gmana ya mas? knpa red itu >> 16, trus green itu >> 8 ?
    maksih mas sbelumnya.

  6. heni says:

    mas saya mau tanya , bagaimana caranya menampung nilai hasil binerisasi ke dalam 1 array 2D dengan height ny sebagai jumlah gambar dan weidht nya sebagai nilai pixel … terima kasih

Leave a comment