java版兩圖對比類似度

import javax.imageio.*;java

import java.awt.image.*;圖片

import java.awt.*;//Colorget

import java.io.*;it

public class PhotoDigest{io

    public static void main(String[] args)throws Exception{class

        String Ypath = "C:/Users/Administrator/Desktop/1.jpg";import

        String Opath ="C:/Users/Administrator/Desktop/2.jpg";float

        float percent = compare(getData(Ypath),getData(Opath));im

        System.out.println("兩張圖片的類似度爲:"+percent+"%");static

    }

    public static int[] getData(String name)throws Exception{

        BufferedImage img = ImageIO.read(new File(name));

        BufferedImage slt = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);

        slt.getGraphics().drawImage(img,0,0,100,100,null);

        //ImageIO.write(slt,"jpeg",new File("slt.jpg"));

        //使用RGB顏色對比~

        int[] data = new int[256];

        for(int x = 0;x<slt.getWidth();x++){

            for(int y = 0;y<slt.getHeight();y++){

                int rgb = slt.getRGB(x,y);

                Color myColor = new Color(rgb);

                int r = myColor.getRed();

                int g = myColor.getGreen();

                int b = myColor.getBlue();

                data[(r+g+b)/3]++;

            }

        }

        //data 就是所謂圖形學當中的直方圖的概念

        return data;

    }

    public static float compare(int[] s,int[] t){

        float result = 0F;

        for(int i = 0;i<256;i++){

            int abs = Math.abs(s[i]-t[i]);

            int max = Math.max(s[i],t[i]);

            result += (1-((float)abs/(max==0?1:max)));

        }

        return (result/256)*100;

    }

}

相關文章
相關標籤/搜索