Java实现图片比对算法(java图片分析)

网友投稿 329 2022-08-10


Java实现图片比对算法(java图片分析)

采用直方图原理算法比对图片的细微差别效果比较好,以下两张区别很小的图片识别效果如下:

识别结果:

主要代码如下:

import javax.imageio.*;

import java.awt.image.*;

import java.awt.*;

import java.io.*;

public class PhotoDigest {

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

float percent = compare(getData("/Users/sun/Downloads/1.jpg"),

getData("/Users/sun/Downloads/3.jpg"));

if (percent == 0) {

System.out.println("无法比较");

} else {

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

}

}

public static int[] getData(String name) {

try {

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"));

int[] data = new int[256];

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

for (int y = 0; BIAjdHIy < 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]++;

}

http:// }

// data 就是所谓图形学当中的直方图的概念

return data;

} catch (Exception exception) {

System.out.println("有文件没有找到,请检查文件是否存在或路径是否正确");

return null;

}

}

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

try {

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;

} catch (Exception exception) {

return 0;

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现识别二维码图片功能(根据图片生成二维码)
下一篇:elasticsearch集群cluster示例详解(elasticsearch cluster)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~