luinstein 发表于 2012-12-13 20:09:13

JAVA 比较两张图片的相似度

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

/**
* 比较两张图片的相似度
* @author Guihua
*
*/
public class BMPLoader {
      // 改变成二进制码
      public static String[][] getPX(String args) {
                int[] rgb = new int;

                File file = new File(args);
                BufferedImage bi = null;
                try {
                        bi = ImageIO.read(file);
                } catch (Exception e) {
                        e.printStackTrace();
                }

                int width = bi.getWidth();
                int height = bi.getHeight();
                int minx = bi.getMinX();
                int miny = bi.getMinY();
                String[][] list = new String;
                for (int i = minx; i < width; i++) {
                        for (int j = miny; j < height; j++) {
                              int pixel = bi.getRGB(i, j);
                              rgb = (pixel & 0xff0000) >> 16;
                              rgb = (pixel & 0xff00) >> 8;
                              rgb = (pixel & 0xff);
                              list = rgb + "," + rgb + "," + rgb;

                        }
                }
                return list;

      }
      
      public static void compareImage(String imgPath1, String imgPath2){
                String[] images = {imgPath1, imgPath2};
                if (images.length == 0) {
                        System.out.println("Usage >java BMPLoader ImageFile.bmp");
                        System.exit(0);
                }

                // 分析图片相似度 begin
                String[][] list1 = getPX(images);
                String[][] list2 = getPX(images);
                int xiangsi = 0;
                int busi = 0;
                int i = 0, j = 0;
                for (String[] strings : list1) {
                        if ((i + 1) == list1.length) {
                              continue;
                        }
                        for (int m=0; m<strings.length; m++) {
                              try {
                                        String[] value1 = list1.toString().split(",");
                                        String[] value2 = list2.toString().split(",");
                                        int k = 0;
                                        for (int n=0; n<value2.length; n++) {
                                                if (Math.abs(Integer.parseInt(value1) - Integer.parseInt(value2)) < 5) {
                                                      xiangsi++;
                                                } else {
                                                      busi++;
                                                }
                                        }
                              } catch (RuntimeException e) {
                                        continue;
                              }
                              j++;
                        }
                        i++;
                }

                list1 = getPX(images);
                list2 = getPX(images);
                i = 0;
                j = 0;
                for (String[] strings : list1) {
                        if ((i + 1) == list1.length) {
                              continue;
                        }
                        for (int m=0; m<strings.length; m++) {
                              try {
                                        String[] value1 = list1.toString().split(",");
                                        String[] value2 = list2.toString().split(",");
                                        int k = 0;
                                        for (int n=0; n<value2.length; n++) {
                                                if (Math.abs(Integer.parseInt(value1) - Integer.parseInt(value2)) < 5) {
                                                      xiangsi++;
                                                } else {
                                                      busi++;
                                                }
                                        }
                              } catch (RuntimeException e) {
                                        continue;
                              }
                              j++;
                        }
                        i++;
                }
                String baifen = "";
                try {
                        baifen = ((Double.parseDouble(xiangsi + "") / Double.parseDouble((busi + xiangsi) + "")) + "");
                        baifen = baifen.substring(baifen.indexOf(".") + 1, baifen.indexOf(".") + 3);
                } catch (Exception e) {
                        baifen = "0";
                }
                if (baifen.length() <= 0) {
                        baifen = "0";
                }
                if(busi == 0){
                        baifen="100";
                }

                System.out.println("相似像素数量:" + xiangsi + " 不相似像素数量:" + busi + " 相似率:" + Integer.parseInt(baifen) + "%");

      }

      public static void main(String[] args){
                BMPLoader.compareImage("E:\12.bmp", "E:\1.bmp");
      }
}from:http://www.17jquery.com/java/30471/
页: [1]
查看完整版本: JAVA 比较两张图片的相似度