判断两张图片是否相似

判断两张图片是否相似

要判断两张图片是否相似,你可以使用多种方法,其中包括结构相似性指数(SSIM)和 perception hash 等。以下是使用 SSIM 和 perception hash 进行判断的示例代码。

安装必要的包

确保你已经安装了 scikit-image 和 imagehash 库。如果没有,可以使用 pip 安装:

pip install scikit-image imagehash

使用 SSIM 判断相似性

SSIM 是一种结构相似性度量标准,用于判断两张图片在视觉上有多相似。

from skimage.metrics import structural_similarity as ssim
import cv2

# 加载两张图片
image1 = cv2.imread('path_to_your_image1.jpg')
image2 = cv2.imread('path_to_your_image2.jpg')

# 将图片转换为灰度
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# 计算 SSIM 值
ssim_value = ssim(image1_gray, image2_gray)

print(f"SSIM: {ssim_value}")

# 如果 SSIM 值大于某个阈值,可以认为图片相似
threshold = 0.8
if ssim_value > threshold:
    print("The images are similar.")
else:
    print("The images are not similar.")

(1)在这里插入图片描述         ~~~~~~~         (2)在这里插入图片描述         ~~~~~~~         (3)在这里插入图片描述

(1)-(2)
SSIM: 0.9497727050390831
The images are similar.

(1)-(3)
SSIM: 0.939559352304872
The images are similar.

怎么说呢,1和3明显不同啊,为什么说相似???

使用 perception hash 判断相似性

perception hash 是一种感知哈希算法,可以生成图片的哈希值,然后通过比较哈希值来判断图片是否相似。

from imagehash import phash
import cv2
from PIL import Image

# 加载两张图片
image1 = cv2.imread('path_to_your_image1.jpg')
image2 = cv2.imread('path_to_your_image2.jpg')

# 将图片转换为灰度
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# 计算 perception hash
hash1 = phash(Image.fromarray(image1_gray))
hash2 = phash(Image.fromarray(image2_gray))

# 计算哈希值的汉明距离
hamming_distance = hash1 - hash2

print(f"Hamming distance: {hamming_distance}")

# 如果汉明距离小于某个阈值,可以认为图片相似
threshold = 5
if hamming_distance < threshold:
    print("The images are similar.")
else:
    print("The images are not similar.")
(1)-(2)
Hamming distance: 6
The images are not similar.

(1)-(3)
Hamming distance: 32
The images are not similar.

这才对吗,虽然都不相似,1-2些许不同,但很接近相似,1-3明显不相似,这跟阈值有点关系。阈值越小,相似性要求越严格。

注意:这两种方法都有各自的适用场景和优缺点。SSIM 方法更注重图片的结构和亮度变化,而 perception hash 方法则更注重图片的整体外观。选择哪种方法取决于你的具体需求和图片的特性。

相关推荐

  1. Pillow教程:对比图片是否相同

    2024-06-16 08:56:01       14 阅读
  2. Rust 中个 HashMap 是否相等判断问题

    2024-06-16 08:56:01       17 阅读
  3. 判断是否在GPU上

    2024-06-16 08:56:01       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 08:56:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 08:56:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 08:56:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 08:56:01       20 阅读

热门阅读

  1. 中电金信:The Financial-Grade Digital Infrastructure

    2024-06-16 08:56:01       8 阅读
  2. 小程序的生命周期

    2024-06-16 08:56:01       5 阅读
  3. 如何使用python matplotlib绘制正态分布的直方图?

    2024-06-16 08:56:01       8 阅读
  4. C++ Primer Plus v6 Chapter13 exercise 4

    2024-06-16 08:56:01       7 阅读
  5. 200. 岛屿数量

    2024-06-16 08:56:01       6 阅读
  6. 如何开发高效服务(C++ )

    2024-06-16 08:56:01       6 阅读
  7. 【@Bean和@component的区别】

    2024-06-16 08:56:01       7 阅读
  8. PHP入门教程2:控制结构和函数

    2024-06-16 08:56:01       7 阅读
  9. 印象笔记使用技巧

    2024-06-16 08:56:01       6 阅读
  10. Android开启HTTP服务

    2024-06-16 08:56:01       7 阅读
  11. FFmpeg YUV编码为H264

    2024-06-16 08:56:01       7 阅读
  12. Android BMI程序设计

    2024-06-16 08:56:01       7 阅读
  13. Bootstrap 创建一个网页

    2024-06-16 08:56:01       6 阅读
  14. 系统编程:管道

    2024-06-16 08:56:01       6 阅读
  15. 2024-Pop!_OS新版本,新桌面环境的消息

    2024-06-16 08:56:01       8 阅读