golang图像感知哈希计算插件库goimagehash的使用
golang图像感知哈希计算插件库goimagehash的使用
goimagehash是一个用Go语言编写的图像哈希计算库,支持多种哈希算法:
- 平均哈希(Average hashing)
- 差异哈希(Difference hashing)
- 感知哈希(Perception hashing)
- 小波哈希(Wavelet hashing) [TODO]
安装
go get github.com/corona10/goimagehash
使用示例
下面是一个完整的使用示例,展示了如何使用goimagehash计算图像哈希并比较图像相似度:
package main
import (
"bufio"
"bytes"
"fmt"
"image/jpeg"
"os"
"github.com/corona10/goimagehash"
)
func main() {
// 打开两个图像文件
file1, _ := os.Open("sample1.jpg")
file2, _ := os.Open("sample2.jpg")
defer file1.Close()
defer file2.Close()
// 解码JPEG图像
img1, _ := jpeg.Decode(file1)
img2, _ := jpeg.Decode(file2)
// 计算平均哈希并比较
hash1, _ := goimagehash.AverageHash(img1)
hash2, _ := goimagehash.AverageHash(img2)
distance, _ := hash1.Distance(hash2)
fmt.Printf("AverageHash - 图像距离: %v\n", distance)
// 计算差异哈希并比较
hash1, _ = goimagehash.DifferenceHash(img1)
hash2, _ = goimagehash.DifferenceHash(img2)
distance, _ = hash1.Distance(hash2)
fmt.Printf("DifferenceHash - 图像距离: %v\n", distance)
// 计算扩展平均哈希(可自定义宽度和高度)
width, height := 8, 8
hash3, _ := goimagehash.ExtAverageHash(img1, width, height)
hash4, _ := goimagehash.ExtAverageHash(img2, width, height)
distance, _ = hash3.Distance(hash4)
fmt.Printf("ExtAverageHash - 图像距离: %v\n", distance)
fmt.Printf("hash3 位大小: %v\n", hash3.Bits())
fmt.Printf("hash4 位大小: %v\n", hash4.Bits())
// 哈希序列化和反序列化示例
var b bytes.Buffer
foo := bufio.NewWriter(&b)
_ = hash4.Dump(foo) // 序列化哈希
foo.Flush()
bar := bufio.NewReader(&b)
hash5, _ := goimagehash.LoadExtImageHash(bar) // 反序列化哈希
fmt.Printf("反序列化后的哈希: %v\n", hash5)
}
主要功能说明
-
哈希计算:
AverageHash()
: 计算平均哈希DifferenceHash()
: 计算差异哈希ExtAverageHash()
: 计算可自定义尺寸的扩展平均哈希
-
哈希比较:
Distance()
: 计算两个哈希之间的汉明距离,值越小表示图像越相似
-
序列化/反序列化:
Dump()
: 将哈希序列化到writerLoadExtImageHash()
: 从reader加载哈希
-
实用方法:
Bits()
: 获取哈希的位大小
版本更新说明
v1.1.0
- 提升了感知哈希的性能
v1.0.3
- 添加了GithubAction工作流
- 修复了LoadImageHash的GoDoc拼写错误
v1.0.2
- 使用go.mod进行安装
v1.0.1
- 减少了感知/扩展感知哈希的创建时间
v1.0.0
- 提供了更灵活的扩展哈希API
- 添加了新的序列化API
- 弃用了ExtImageHashFromString和ImageHashFromString
- 添加了Bits API来测量哈希的实际位大小
这个库非常适合用于图像相似度比较、重复图像检测等场景。通过计算图像哈希并比较哈希距离,可以快速判断图像的相似程度。
更多关于golang图像感知哈希计算插件库goimagehash的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复