दिलचस्प पोस्ट
सीज़न का उपयोग करके होवर पर भाई तत्वों का रंग बदलें सरल विभाजन गणना के लिए पायथन 0 क्यों वापस करता है? PHP दिनांक वाले तत्वों द्वारा एक बहुआयामी सरणी क्रमित करें गिनती के साथ लंबे प्रारूप में लंबे समय तक कन्वर्ट करने का आसान तरीका डिफ़ॉल्ट जावा वर्ण एन्कोडिंग सेट करना? त्रुटि: मुख्य वर्ग को ढूंढ या लोड नहीं किया जा सका प्रोसेस एक्सप्लोरर से "एंड प्रोसेस" के साथ मारे जाने से उपयोगकर्ता की प्रक्रिया को रोकें पूंछ के समान एक फ़ाइल की अंतिम एन लाइनें प्राप्त करें छवि को वेबसाइट से स्थानीय फ़ाइल में खींचने के लिए httpwebrequest का उपयोग कैसे करें मैं जेएसओएन को जीएसएन का उपयोग कर एक हैशमैक्स में कैसे परिवर्तित कर सकता / सकती हूं? पेजिंग को लागू करने के लिए प्रभावी तरीका पहलू अनुपात के साथ UIImage का आकार बदलें? वीबी में एसक्यूएल कमांड में पैरामीटर "@" का उपयोग कैसे करें एक प्रकार के बाद एक प्रश्न चिह्न का उद्देश्य क्या है (उदाहरण के लिए: int? MyVariable)? डेटा फ्रेम से विशिष्ट कॉलम निकाले जा रहे हैं

छवि डेटा का हिस्टोग्राम प्रदर्शित करना

मुझे कभी-कभी हिस्टोग्राम के रूप में छवि डेटा का प्रतिनिधित्व करने की आवश्यकता होती है I मैं विशेष रूप से छवि डेटा तक पहुंचने के तरीकों में दिलचस्पी रहा हूँ मैं JFreeChart परिचित हूं, जिसमें हिस्टोग्राम समर्थन शामिल है, लेकिन मैं अन्य तरीकों पर विचार करता हूं।

वेब के समाधान से एकत्रित समाधान "छवि डेटा का हिस्टोग्राम प्रदर्शित करना"

नीचे दिए गए उदाहरण एक मनमाना छवि के एक आरजीबी हिस्टोग्राम बनाने के लिए कई तकनीकों का उपयोग करता है:

  • Raster विधि getSamples() BufferedImage से प्रत्येक रंग बैंड के मूल्यों को निकालता है।

  • HistogramDataset addSeries() विधि addSeries() dataset प्रत्येक बैंड की संख्या जोड़ती है।

  • StandardXYBarPainter ChartFactory ने 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; /** * @see https://stackoverflow.com/q/40537278/230513 * @see https://stackoverflow.com/q/11870416/230513 * @see https://stackoverflow.com/a/28519356/230513 */ 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(); }); } } 

Chart2D लाइब्रेरी का उपयोग करना, नीचे दिए गए उदाहरण में कुछ वैकल्पिक तरीकों को दिखाया गया है।

  • एक ColorConvertOp का उपयोग नमूना छवि को ग्रेस्केल में कनवर्ट करने के लिए किया जाता है, जैसा कि यहां और यहां दिखाया गया है ।

  • नेस्टेड लूप getRGB() के पिक्सेल पर पुनरावृति करते हैं, प्रत्येक पिक्सेल के मूल्य को निकालने के लिए getRGB() विधि को लागू करते हैं; संबंधित आंकड़ों का उपयोग dataset निर्माण के लिए किया जाता है।

Chart2DHistogram

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.image.BufferedImage; import java.awt.image.ColorConvertOp; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.UIManager; import net.sourceforge.chart2d.Chart2DProperties; import net.sourceforge.chart2d.Dataset; import net.sourceforge.chart2d.GraphChart2DProperties; import net.sourceforge.chart2d.GraphProperties; import net.sourceforge.chart2d.LBChart2D; import net.sourceforge.chart2d.LegendProperties; import net.sourceforge.chart2d.MultiColorsProperties; import net.sourceforge.chart2d.Object2DProperties; /** @see https://stackoverflow.com/q/9964872/230513 */ public class Histogram extends JPanel { private BufferedImage image = getImage("OptionPane.warningIcon"); private BufferedImage gray = getGray(image); public Histogram() { JPanel panel = new JPanel(new GridLayout(0, 1)); panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); panel.add(new JLabel(new ImageIcon(image))); panel.add(new JLabel(new ImageIcon(gray))); this.setLayout(new BorderLayout()); this.add(panel, BorderLayout.WEST); this.add(createChart(gray, 20), BorderLayout.CENTER); } private BufferedImage getImage(String name) { Icon icon = UIManager.getIcon(name); int w = icon.getIconWidth(); int h = icon.getIconHeight(); this.setPreferredSize(new Dimension(w, h)); BufferedImage i = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = (Graphics2D) i.getGraphics(); g2d.setPaint(new GradientPaint( 0, 0, Color.blue, w, h, Color.green, true)); g2d.fillRect(0, 0, w, h); icon.paintIcon(null, g2d, 0, 0); g2d.dispose(); return i; } private BufferedImage getGray(BufferedImage image) { BufferedImage g = new BufferedImage( image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY); ColorConvertOp op = new ColorConvertOp( image.getColorModel().getColorSpace(), g.getColorModel().getColorSpace(), null); op.filter(image, g); return g; } private LBChart2D createChart(BufferedImage gray, int buckets) { // Chart2D configuration Object2DProperties object2DProps = new Object2DProperties(); object2DProps.setObjectTitleText("Gray Histogram"); Chart2DProperties chart2DProps = new Chart2DProperties(); chart2DProps.setChartDataLabelsPrecision(-1); LegendProperties legendProps = new LegendProperties(); String[] legendLabels = {"Gray"}; legendProps.setLegendLabelsTexts(legendLabels); GraphChart2DProperties graphChart2DProps = new GraphChart2DProperties(); graphChart2DProps.setLabelsAxisTitleText("Gray"); graphChart2DProps.setNumbersAxisTitleText("Count"); // Dataset String[] labelsAxisLabels = new String[buckets]; for (int i = 0; i < labelsAxisLabels.length; i++) { labelsAxisLabels[i] = String.valueOf(i * 256 / buckets); } graphChart2DProps.setLabelsAxisLabelsTexts(labelsAxisLabels); int[] counts = new int[buckets]; for (int r = 0; r < gray.getHeight(); r++) { for (int c = 0; c < gray.getWidth(); c++) { int v = (gray.getRGB(c, r) & 0xff) * buckets / 256; counts[v]++; } } Dataset dataset = new Dataset(1, counts.length, 1); for (int i = 0; i < counts.length; i++) { dataset.set(0, i, 0, counts[i]); } GraphProperties graphProps = new GraphProperties(); MultiColorsProperties multiColorsProps = new MultiColorsProperties(); LBChart2D chart2D = new LBChart2D(); chart2D.setObject2DProperties(object2DProps); chart2D.setChart2DProperties(chart2DProps); chart2D.setLegendProperties(legendProps); chart2D.setGraphChart2DProperties(graphChart2DProps); chart2D.addGraphProperties(graphProps); chart2D.addDataset(dataset); chart2D.addMultiColorsProperties(multiColorsProps); //Optional validation: Prints debug messages if invalid only. if (!chart2D.validate(false)) { chart2D.validate(true); } return chart2D; } private void display() { JFrame f = new JFrame("Histogram"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setSize(640, 480); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Histogram().display(); } }); } }