Path: blob/master/samples/java/tutorial_code/ImgProc/threshold/Threshold.java
16354 views
import java.awt.BorderLayout;1import java.awt.Container;2import java.awt.Image;34import javax.swing.BoxLayout;5import javax.swing.ImageIcon;6import javax.swing.JFrame;7import javax.swing.JLabel;8import javax.swing.JPanel;9import javax.swing.JSlider;10import javax.swing.event.ChangeEvent;11import javax.swing.event.ChangeListener;1213import org.opencv.core.Core;14import org.opencv.core.Mat;15import org.opencv.highgui.HighGui;16import org.opencv.imgcodecs.Imgcodecs;17import org.opencv.imgproc.Imgproc;1819public class Threshold {20private static int MAX_VALUE = 255;21private static int MAX_TYPE = 4;22private static int MAX_BINARY_VALUE = 255;23private static final String WINDOW_NAME = "Threshold Demo";24private static final String TRACKBAR_TYPE = "<html><body>Type: <br> 0: Binary <br> "25+ "1: Binary Inverted <br> 2: Truncate <br> "26+ "3: To Zero <br> 4: To Zero Inverted</body></html>";27private static final String TRACKBAR_VALUE = "Value";28private int thresholdValue = 0;29private int thresholdType = 3;30private Mat src;31private Mat srcGray = new Mat();32private Mat dst = new Mat();33private JFrame frame;34private JLabel imgLabel;3536public Threshold(String[] args) {37//! [load]38String imagePath = "../data/stuff.jpg";39if (args.length > 0) {40imagePath = args[0];41}42// Load an image43src = Imgcodecs.imread(imagePath);44if (src.empty()) {45System.out.println("Empty image: " + imagePath);46System.exit(0);47}48// Convert the image to Gray49Imgproc.cvtColor(src, srcGray, Imgproc.COLOR_BGR2GRAY);50//! [load]5152//! [window]53// Create and set up the window.54frame = new JFrame(WINDOW_NAME);55frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);56// Set up the content pane.57Image img = HighGui.toBufferedImage(srcGray);58addComponentsToPane(frame.getContentPane(), img);59// Use the content pane's default BorderLayout. No need for60// setLayout(new BorderLayout());61// Display the window.62frame.pack();63frame.setVisible(true);64//! [window]65}6667private void addComponentsToPane(Container pane, Image img) {68if (!(pane.getLayout() instanceof BorderLayout)) {69pane.add(new JLabel("Container doesn't use BorderLayout!"));70return;71}7273JPanel sliderPanel = new JPanel();74sliderPanel.setLayout(new BoxLayout(sliderPanel, BoxLayout.PAGE_AXIS));7576//! [trackbar]77sliderPanel.add(new JLabel(TRACKBAR_TYPE));78// Create Trackbar to choose type of Threshold79JSlider sliderThreshType = new JSlider(0, MAX_TYPE, thresholdType);80sliderThreshType.setMajorTickSpacing(1);81sliderThreshType.setMinorTickSpacing(1);82sliderThreshType.setPaintTicks(true);83sliderThreshType.setPaintLabels(true);84sliderPanel.add(sliderThreshType);8586sliderPanel.add(new JLabel(TRACKBAR_VALUE));87// Create Trackbar to choose Threshold value88JSlider sliderThreshValue = new JSlider(0, MAX_VALUE, 0);89sliderThreshValue.setMajorTickSpacing(50);90sliderThreshValue.setMinorTickSpacing(10);91sliderThreshValue.setPaintTicks(true);92sliderThreshValue.setPaintLabels(true);93sliderPanel.add(sliderThreshValue);94//! [trackbar]9596//! [on_trackbar]97sliderThreshType.addChangeListener(new ChangeListener() {98@Override99public void stateChanged(ChangeEvent e) {100JSlider source = (JSlider) e.getSource();101thresholdType = source.getValue();102update();103}104});105106sliderThreshValue.addChangeListener(new ChangeListener() {107@Override108public void stateChanged(ChangeEvent e) {109JSlider source = (JSlider) e.getSource();110thresholdValue = source.getValue();111update();112}113});114//! [on_trackbar]115116pane.add(sliderPanel, BorderLayout.PAGE_START);117imgLabel = new JLabel(new ImageIcon(img));118pane.add(imgLabel, BorderLayout.CENTER);119}120121//! [Threshold_Demo]122private void update() {123Imgproc.threshold(srcGray, dst, thresholdValue, MAX_BINARY_VALUE, thresholdType);124Image img = HighGui.toBufferedImage(dst);125imgLabel.setIcon(new ImageIcon(img));126frame.repaint();127}128//! [Threshold_Demo]129130public static void main(String[] args) {131// Load the native OpenCV library132System.loadLibrary(Core.NATIVE_LIBRARY_NAME);133134// Schedule a job for the event dispatch thread:135// creating and showing this application's GUI.136javax.swing.SwingUtilities.invokeLater(new Runnable() {137@Override138public void run() {139new Threshold(args);140}141});142}143}144145146