当前位置: 首页 > news >正文

Python判断两张图片的相似度

在Python中,判断两张以numpyndarray格式存储的图片的相似度,通常可以通过多种方法来实现,包括但不限于直方图比较、像素差比较、结构相似性指数(SSIM)、特征匹配等。以下是一些常见方法的简要介绍和示例代码。

1. 像素差比较

最直接的方法是计算两张图片对应像素之间的差异。然而,这种方法对图片的旋转、缩放等变换非常敏感。

import numpy as npdef pixel_difference(img1, img2):if img1.shape != img2.shape:raise ValueError("Images must have the same shape")diff = np.sum(np.abs(img1.astype(np.float32) - img2.astype(np.float32)))return diff# 假设 img1 和 img2 是两个相同尺寸的 ndarray 图片
# result = pixel_difference(img1, img2)
# print(f"Pixel Difference: {result}")

2. 直方图比较

通过比较两张图片的直方图来判断它们的相似度。这种方法对颜色分布敏感,但对空间信息不敏感。

from skimage.exposure import histogramdef histogram_comparison(img1, img2):hist1, bin_idx1 = histogram(img1)hist2, bin_idx2 = histogram(img2)# 这里可以使用多种方法来比较直方图,如计算欧氏距离、巴氏距离等diff = np.linalg.norm(hist1 - hist2)return diff# 假设 img1 和 img2 是两个 ndarray 图片
# result = histogram_comparison(img1, img2)
# print(f"Histogram Difference: {result}")

3. 结构相似性指数(SSIM)

SSIM是一种衡量两幅图片视觉相似度的指标,它考虑了亮度、对比度和结构信息。

from skimage.metrics import structural_similarity as ssimdef compare_ssim(img1, img2):# 确保img1和img2是灰度图,如果不是,需要先转换if img1.ndim == 3:img1 = img1.mean(axis=2)if img2.ndim == 3:img2 = img2.mean(axis=2)(score, diff) = ssim(img1, img2, full=True)return score, diff# 假设 img1 和 img2 是两个 ndarray 图片
# score, diff = compare_ssim(img1, img2)
# print(f"SSIM: {score}, Diff: {diff}")

注意

  • 上述代码中的img1img2应该是相同尺寸和类型的numpy.ndarray
  • 对于颜色图片,一些方法(如SSIM)可能需要先将图片转换为灰度图或使用其他方式处理颜色通道。
  • 在实际应用中,可能需要根据图片的具体情况和需求选择合适的方法。
http://www.lryc.cn/news/436685.html

相关文章:

  • MySQL高级功能-窗口函数
  • 9.12总结
  • 小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)
  • 《CSS新世界》书评
  • python 实现euler modified变形欧拉法算法
  • strcpy 函数及其缺点
  • 区块链-P2P(八)
  • 数据库管理的利器Navicat —— 全面测评与热门产品推荐
  • 如何让Google收录我的网站?
  • 03 Flask-添加配置信息
  • Codes 开源研发项目管理平台——敏捷测试管理创新解决方案
  • 耗时一个月,我做了一个网页视频编辑器
  • uniapp 做一个查看图片的组件,图片可缩放移动
  • 卡车配置一键启动无钥匙进入手机控车
  • 计算机网络基础概念 交换机、路由器、网关、TBOX
  • labview禁用8080端口
  • 字符串的KMP算法详解及C/C++代码实现
  • 2024年数学建模比赛题目及解题代码
  • BERT 论文逐段精读【论文精读】
  • 在Flask中实现跨域请求(CORS)
  • 在桌面商业分析应用程序中启用高级 Web UI
  • CentOS Stream 8 通过 Packstack 安装开源 OpenStack(V版)
  • OpenSSL工具验证RSA证书
  • 架构师白话分布式系统
  • C++ 中 vector 的常用功能介绍
  • [QT] QT事件与事件重写
  • c# 视觉识别图片文字 二维码
  • UEFI——访问PCI/PCIE设备(二)
  • 决策树算法的介绍与应用
  • 杰发科技Bootloader(3)—— 基于7801的APP切到Boot