在网上找了好久都没有找到判断图片相似度的差异值哈希算法的JAVA版正确实现,自己手写了一个,提供给大家参考。
差异值哈希算法的流程(dHash)
- 图片缩放为9*8大小
- 将图片灰度化
- 差异值计算(每行相邻像素的差值,这样会生成8*8的差值,前一个像素大于后一个像素则为1,否则为0)
- 生成哈希值
package com.example.demo.hello;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* 差异哈希算法
*/
public class DHashUtil {
/**
* 计算dHash方法
*
* @param file 文件
* @return hash
*/
private static String getDHash(File file) {
//读取文件
BufferedImage srcImage;
try {
srcImage = ImageIO.read(file);
} catch (IOException e) {
e.printStackTrace();
return null;
}
//文件转成9*8像素,为算法比较通用的长宽
BufferedImage buffImg = new BufferedImage(9, 8, Buffere