当前位置: 首页 > 面试题库 >

如何使用RGB像素值绘制直方图?

邢永安
2023-03-14
问题内容

我在netbeans平台上制作了App。我想绘制直方图。我有红色,绿色和蓝色的图像像素。因此,请任何人对我提出建议,如何使用该像素值绘制直方图?我的代码在下面,其中我使用图像的红色,绿色和蓝色像素值。

 enter code here



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

      public class WalkImageTest10 extends Component {

      public static void main(String[] foo) throws IOException {
      WalkImageTest10 wa= new WalkImageTest10();
     }

      public void printPixelARGB(int pixel) {
      int alpha = (pixel >> 24) & 0xff;
      int red = (pixel >> 16) & 0xff;
      int green = (pixel >> 8) & 0xff;
      int blue = (pixel) & 0xff;

      System.out.println("argb: " + alpha + ", " + red + ", " + green + ", " + blue);
      //System.out.println(pixel);
     }

     private void marchThroughImage(BufferedImage image) {
     int w = image.getWidth();
      int h = image.getHeight();
      int pixel;
      System.out.println("width, height: " + w + ", " + h);

     for (int i = 0; i < h; i++) {
     for (int j = 0; j < w; j++) {
     //System.out.println("x,y: " + j + ", " + i);
     pixel = image.getRGB(j, i);
     printPixelARGB(pixel);
      //System.out.println("value of K:"+k+ " value of  pixel: " + pixel[j][i]);
     }
     }
System.out.println("loop is completed");
}

public WalkImageTest10() throws IOException {
// this is an image of a white spot on a black background.
// with the smoothing in the image it's of course not all black
// and white
BufferedImage image = 
ImageIO.read(new File("F:\\java\\aimages\\003.jpg"));
marchThroughImage(image);

}
}

问题答案:
import java.awt.Color;
       import java.awt.Graphics;
      import java.awt.image.BufferedImage;
      import java.awt.image.RescaleOp;
     import java.io.IOException;
     import javax.media.jai.JAI;
     import javax.media.jai.PlanarImage;
        import javax.swing.*;

    public class FinalHistogram extends JPanel {

   int[] bins = new int[256];
  FinalHistogram(int[] pbins) {
    bins = pbins;
    repaint();
   }

 @Override
 protected void paintComponent(Graphics g) {
    //g.drawLine();

    for (int i = 0; i < 256; i++) {

        System.out.println("bin[" + i + "]===" + bins[i]);
        g.drawLine(200 + i, 300, 200 + i, 300 - (bins[i])/1000);
        //g.drawLine(200 + i, 200, 200 + i, 200-(bins[i])/1500);

        //  System.out.println("bin["+i+"]==="+bins[i]);
     }

   }


  public static void main(String[] args) throws IOException {
    JFrame frame = new JFrame();
    frame.setSize(500, 500);
    int[] pbins = new int[256];
    int[] sbins = new int[256];
    PlanarImage image = JAI.create("fileload", "image12.tiff");
    BufferedImage bi = image.getAsBufferedImage();    
    System.out.println("tipe is          " + bi.getType());
    int[] pixel = new int[3];

    int k = 0;
    Color c = new Color(k);
    Double d = 0.0;
    Double d1;
    for (int x = 0; x < bi.getWidth(); x++) {
        for (int y = 0; y < bi.getHeight(); y++) {
            pixel = bi.getRaster().getPixel(x, y, new int[3]);
          d=(0.2125*pixel[0])+(0.7154*pixel[1])+(0.072*pixel[2]);
              k=(int) (d/256);

            sbins[k]++;
        }

     }
     System.out.println("copleted" + d + "--" + k);
     JTabbedPane jtp=new JTabbedPane();
     ImageIcon im= new ImageIcon(bi);
      //jtp.add("New image", new JLabel((im)));
        jtp.addTab("Histogram",new FinalHistogram(sbins));
        frame.add(jtp);
     frame.setVisible(true);
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
   }
 }


 类似资料:
  • numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。

  • 我正在尝试使用 marplot.lib 库在 Python 中绘制直方图;但是,我一直收到此错误:“属性错误:箱必须单调增加。 这是我目前的代码: 传入的参数是信息。“信息”是一个元组列表,可能如下所示: [(4, 0.7984031936127745), (5, 0.5988023952095809), (5, 0.8739076154806492), (5, 0.736454497632824

  • 问题内容: 我要执行以下操作: 我希望在短时间内显示许多不同的像素和颜色配置-写入中间文件会太昂贵。 我如何最好地实现Python中的这一目标? 问题答案: 直接回答: 这只能通过特定于操作系统的API来完成。某些操作系统不允许直接更改屏幕上的像素。 在Windows上,您可以使用pywin32库通过调用获取屏幕的设备上下文,然后使用绘制像素。 当然,以这种方式绘制的内容可以随时删除。 正确答案:

  • 我有一个从pandas数据框创建的直方图,我想绘制一条代表数据集平均值的垂直虚线。我已经回顾了这个线程,这正是我正在寻找的样式,但是,我不知道如何使它与我的代码一起工作(如下所示): 我最终收到了以下错误: 不知道这意味着什么,任何帮助都将不胜感激。 编辑:我的数据文件是一个有一列的csv,第一行是一个标题(字符串),所有后续的107行都是从app开始的值。1.0E 11至4.0E 11 假数据(

  • 问题内容: 如果使用打开图像,假设我具有像素的坐标,如何获得像素的RGB值? 那么,我该怎么做呢?从空白图形开始,“写入”具有一定RGB值的像素? 如果我不必下载任何其他库,我会希望。 问题答案: 最好使用Python图像库来执行此操作,恐怕这是单独下载的。 执行所需操作的最简单方法是通过Image对象上的load()方法,该方法返回一个像素访问对象,您可以像数组一样对其进行操作: 或者,查看Im

  • 我试图获得像素值从图像随机选择从文件夹与每2秒。例如,我可以得到像素亮度从PImage很容易。但不知道如何得到当我有字符串图像从文件夹。 我也尝试了一系列图像,但仍然不知道如何获得像素RGB值 我已经预料到了这一行的错误,但为了让大家知道我在做什么,我把它放在这里。我面临的错误是:“PApplet类型中的loadImage(String,String)方法不适用于参数(Image,String)”