2010-02-06 104 views
3

有人可以告訴我如何訪問圖像的所有像素,以便能夠構建該圖像的直方圖?訪問圖像的像素

+2

你需要指定平臺 - J2ME,安卓,AWT VS鞦韆,J2SE等都有不同的圖像組件 – Will 2010-02-06 19:15:21

+0

我使用的Java Swing – 2010-02-06 19:27:02

回答

4

您可以使用

java.awt.image.BufferedImage image = ImageIO.read("image.gif"); 
int[] samples = image.getData().getPixel(x, y, null); 

// or the pixel converted to the default RGB color model: 
int rgb = image.getRGB(x, y) 

我覺得samples你從有RGB值,但你必須檢查......

1

下面是一些可能有所幫助的示例代碼 - 請測試它(它似乎適用於我,但您永遠不知道!)。

這個直方圖沒有被均衡,或者這裏沒有任何東西,只是從字面上計算每個帶中特定值的像素。

我相信樂隊(你需要檢查)是R,G,B +阿爾法的順序。

import java.awt.image.BufferedImage; 
import java.awt.image.Raster; 
import java.io.File; 
import javax.imageio.ImageIO; 

public class SimpleImageReader { 


public static void main(String[] args) throws Exception { 
     // File f=new File(args[0]); 
     File f=new File("C:\\1.jpg"); 
     BufferedImage img = ImageIO.read(f); 
     Raster r=img.getData(); 
     int levels=256; 
     int bands=r.getNumBands(); 
     int histogram[][]=new int[bands][levels]; 

     for (int x=r.getMinX();x<r.getWidth();x++) { 
      for (int y=r.getMinY();y<r.getHeight();y++) { 
       for (int b=0;b<3;b++) { 
        int p=r.getSample(x, y, b); 
        histogram[b][p]++; 
       } 
      } 
     } 
     for (int b=0;b<histogram.length;b++) { 
     System.out.println("Band:"+b); 
     for (int i=0;i<histogram[b].length;i++) { 
      System.out.println("\t"+i+"="+histogram[b][i]); 
     } 
     } 
} 
}