/* * Copyright (c) 2011-2016, Peter Abeles. All Rights Reserved. * * This file is part of BoofCV (http://boofcv.org). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package boofcv.gui.image; import boofcv.alg.filter.binary.BinaryImageOps; import boofcv.gui.binary.VisualizeBinaryData; import boofcv.struct.image.GrayS32; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.util.Random; /** * Displays labeled binary images. In these images each detected object is given a unique number. Each * of those numbers is given a unique color. * * @author Peter Abeles */ public class ImageBinaryLabeledPanel extends JPanel implements MouseListener { // the image being displayed protected BufferedImage img; protected GrayS32 labelImage; int colors[]; public ImageBinaryLabeledPanel(GrayS32 labelImage, int maxValues , long randSeed ) { this(); this.labelImage = labelImage; img = new BufferedImage(labelImage.getWidth(), labelImage.getHeight(),BufferedImage.TYPE_INT_RGB); setPreferredSize(new Dimension(labelImage.getWidth(), labelImage.getHeight())); setMinimumSize(getPreferredSize()); setMaximumSize(getPreferredSize()); Random rand = new Random(randSeed); colors = BinaryImageOps.selectRandomColors(maxValues,rand); VisualizeBinaryData.renderLabeled(labelImage, colors, img); } protected ImageBinaryLabeledPanel() { addMouseListener(this); } @Override public void paintComponent(Graphics g) { //draw the image if (img != null) g.drawImage(img, 0, 0, this); } public void setImage(GrayS32 binaryImage) { this.labelImage = binaryImage; } public BufferedImage getImage() { return img; } @Override public void mouseClicked(MouseEvent e) { if( labelImage.isInBounds(e.getX(),e.getY()) ) { int val = labelImage.get(e.getX(),e.getY()); System.out.println("Label at ("+e.getX()+","+e.getY()+") = "+val); } } @Override public void mousePressed(MouseEvent e) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void mouseReleased(MouseEvent e) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void mouseEntered(MouseEvent e) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void mouseExited(MouseEvent e) { //To change body of implemented methods use File | Settings | File Templates. } }