当前位置: 首页 > 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)可能需要先将图片转换为灰度图或使用其他方式处理颜色通道。
  • 在实际应用中,可能需要根据图片的具体情况和需求选择合适的方法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 汽车免拆诊断案例 | 2013款捷豹XF车偶尔无法起动
  • Jupyter Notebook 修改默认路径
  • 【Linux】:信号的保存和信号处理
  • CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
  • macos 系统文件操作时提示 Read-only file system 解决方法
  • 计算机网络--第六章应用层
  • React实现虚拟列表的优秀库介绍
  • 隐马尔可夫模型(Hidden Markov Model,HMM)—有监督学习方法、概率模型、生成模型
  • 排序方法sort使用方式不同而产生的不同结果,附力扣179思路
  • [001-03-007].第07节:Redis中的事务
  • 【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234
  • CSS之我不会
  • tailscale与zerotier在linux冲突问题解决
  • 基于SSM的养老院管理系统
  • MyBatis 方法重载的陷阱及解决方案
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【笔记】你不知道的JS读书笔记——Promise
  • 2017-08-04 前端日报
  • Apache的80端口被占用以及访问时报错403
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ComponentOne 2017 V2版本正式发布
  • CSS魔法堂:Absolute Positioning就这个样
  • ECS应用管理最佳实践
  • EventListener原理
  • exif信息对照
  • go语言学习初探(一)
  • Map集合、散列表、红黑树介绍
  • Meteor的表单提交:Form
  • SpingCloudBus整合RabbitMQ
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 创建一个Struts2项目maven 方式
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 使用API自动生成工具优化前端工作流
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用element的upload组件实现多图片上传和压缩
  • 用jquery写贪吃蛇
  • 白色的风信子
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $nextTick的使用场景介绍
  • (4.10~4.16)
  • (floyd+补集) poj 3275
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (补充)IDEA项目结构
  • (二)Linux——Linux常用指令
  • (二)WCF的Binding模型
  • (分类)KNN算法- 参数调优
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)程序员疫苗:代码注入
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 中 GetProcess 相关方法的性能
  • .net对接阿里云CSB服务