java版两图对比相似度

import javax.imageio.*;

import java.awt.image.*;

import java.awt.*;//Color

import java.io.*;

public class PhotoDigest{

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

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

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

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

        System.out.println("两张图片的相似度为:"+percent+"%");

    }

    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;

    }

}

转载于:https://my.oschina.net/MStart/blog/708667

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值