栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java显示图像数据的直方图

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java显示图像数据的直方图

下面的示例使用多种技术来创建任意图像的RGB直方图:

  • Raster
    方法
    getSamples()
    从中提取每个色带的值BufferedImage。

  • HistogramDataset
    方法
    addSeries()
    将每个频段的计数添加到
    dataset

  • 一个

    StandardXYBarPainter
    替换
    ChartFactory
    默认,如图所示这里。

  • 定制

    DefaultDrawingSupplier
    提供每个系列所需的颜色;它包含半透明的颜色。

  • 一种变型

    VisibleAction
    ,讨论在这里,用于控制每个带的可见性; 这里
    ChartMouseListener
    显示了一种补充方法。

import java.awt.BorderLayout;import java.awt.Color;import java.awt.EventQueue;import java.awt.Paint;import java.awt.event.ActionEvent;import java.awt.image.BufferedImage;import java.awt.image.Raster;import java.io.IOException;import java.net.URL;import javax.imageio.ImageIO;import javax.swing.AbstractAction;import javax.swing.ImageIcon;import javax.swing.JCheckBox;import javax.swing.Jframe;import javax.swing.JLabel;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.DefaultDrawingSupplier;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.StandardXYBarPainter;import org.jfree.chart.renderer.xy.XYBarRenderer;import org.jfree.data.statistics.HistogramDataset;public class Histogram {    private static final int BINS = 256;    private final BufferedImage image = getImage();    private HistogramDataset dataset;    private XYBarRenderer renderer;    private BufferedImage getImage() {        try { return ImageIO.read(new URL(     "http://i.imgur.com/kxXhIH1.jpg"));        } catch (IOException e) { e.printStackTrace(System.err);        }        return null;    }    private ChartPanel createChartPanel() {        // dataset        dataset = new HistogramDataset();        Raster raster = image.getRaster();        final int w = image.getWidth();        final int h = image.getHeight();        double[] r = new double[w * h];        r = raster.getSamples(0, 0, w, h, 0, r);        dataset.addSeries("Red", r, BINS);        r = raster.getSamples(0, 0, w, h, 1, r);        dataset.addSeries("Green", r, BINS);        r = raster.getSamples(0, 0, w, h, 2, r);        dataset.addSeries("Blue", r, BINS);        // chart        JFreeChart chart = ChartFactory.createHistogram("Histogram", "Value", "Count", dataset, PlotOrientation.VERTICAL, true, true, false);        XYPlot plot = (XYPlot) chart.getPlot();        renderer = (XYBarRenderer) plot.getRenderer();        renderer.setBarPainter(new StandardXYBarPainter());        // translucent red, green & blue        Paint[] paintArray = { new Color(0x80ff0000, true), new Color(0x8000ff00, true), new Color(0x800000ff, true)        };        plot.setDrawingSupplier(new DefaultDrawingSupplier( paintArray, DefaultDrawingSupplier.DEFAULT_FILL_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE));        ChartPanel panel = new ChartPanel(chart);        panel.setMouseWheelEnabled(true);        return panel;    }    private JPanel createControlPanel() {        JPanel panel = new JPanel();        panel.add(new JCheckBox(new VisibleAction(0)));        panel.add(new JCheckBox(new VisibleAction(1)));        panel.add(new JCheckBox(new VisibleAction(2)));        return panel;    }    private class VisibleAction extends AbstractAction {        private final int i;        public VisibleAction(int i) { this.i = i; this.putValue(NAME, (String) dataset.getSeriesKey(i)); this.putValue(SELECTED_KEY, true); renderer.setSeriesVisible(i, true);        }        @Override        public void actionPerformed(ActionEvent e) { renderer.setSeriesVisible(i, !renderer.getSeriesVisible(i));        }    }    private void display() {        Jframe f = new Jframe("Histogram");        f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        f.add(createChartPanel());        f.add(createControlPanel(), BorderLayout.SOUTH);        f.add(new JLabel(new ImageIcon(image)), BorderLayout.WEST);        f.pack();        f.setLocationRelativeTo(null);        f.setVisible(true);    }    public static void main(String[] args) {        EventQueue.invokeLater(() -> { new Histogram().display();        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号