All Downloads are FREE. Search and download functionalities are using the official Maven repository.

boofcv.gui.image.ImageBinaryLabeledPanel Maven / Gradle / Ivy

Go to download

BoofCV is an open source Java library for real-time computer vision and robotics applications.

The newest version!
/*
 * 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.
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy