资源介绍
ImageComparerUI——基于Java语言实现的相似图像识别,基于直方图比较算法。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageComparerUI extends JComponent implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JButton browseBtn;
private JButton histogramBtn;
private JButton compareBtn;
private Dimension mySize;
// image operator
private MediaTracker tracker;
private BufferedImage sourceImage;
private BufferedImage candidateImage;
private double simility;
// command constants
public final static String BROWSE_CMD = "Browse...";
public final static String HISTOGRAM_CMD = "Histogram Bins";
public final static String COMPARE_CMD = "Compare Result";
public ImageComparerUI() {
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
browseBtn = new JButton("Browse...");
histogramBtn = new JButton("Histogram Bins");
compareBtn = new JButton("Compare Result");
// buttons
btnPanel.add(browseBtn);
btnPanel.add(histogramBtn);
btnPanel.add(compareBtn);
// setup listener...
browseBtn.addActionListener(this);
histogramBtn.addActionListener(this);
compareBtn.addActionListener(this);
mySize = new Dimension(620, 500);
JFrame demoUI = new JFrame("Similiar Image Finder");
demoUI.getContentPane().setLayout(new BorderLayout());
demoUI.getContentPane().add(this, BorderLayout.CENTER);
demoUI.getContentPane().add(btnPanel, BorderLayout.SOUTH);
demoUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demoUI.pack();
demoUI.setVisible(true);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if(sourceImage != null) {
Image scaledImage = sourceImage.getScaledInstance(300, 300, Image.SCALE_FAST);
g2.drawImage(scaledImage, 0, 0, 300, 300, null);
}
if(candidateImage != null) {
Image scaledImage = candidateImage.getScaledInstance(300, 330, Image.SCALE_FAST);
g2.drawImage(scaledImage, 310, 0, 300, 300, null);
}
// display compare result info here
Font myFont = new Font("Serif", Font.BOLD, 16);
g2.setFont(myFont);
g2.setPaint(Color.RED);
g2.drawString("The degree of similarity : " + simility, 50, 350);
}
public void actionPerformed(ActionEvent e) {
if(BROWSE_CMD.equals(e.getActionCommand())) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File f = chooser.getSelectedFile();
BufferedImage bImage = null;
if(f == null) return;
try {
bImage = ImageIO.read(f);
} catch (IOException e1) {
e1.printStackTrace();
}
tracker = new MediaTracker(this);
tracker.addImage(bImage, 1);
// blocked 10 seconds to load the image data
try {
if (!tracker.waitForID(1, 10000)) {
System.out.println("Load error.");
System.exit(1);
}// end if
} catch (InterruptedException ine) {
ine.printStackTrace();
System.exit(1);
} // end catch
if(sourceImage == null) {
sourceImage = bImage;
}else if(candidateImage == null) {
candidateImage = bImage;
} else {
sourceImage = null;
candidateImage = null;
}
- 上一篇: 百度图像识别java版本
- 下一篇: Java提取EXCEL图片重命名并改变像素大小