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.mzph.cn/diannao/53758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript系列:续篇 - 对象类型(含数组、元数组、函数)

在 TypeScript 中,对象类型用于定义对象的形状(shape),即对象包含哪些属性以及这些属性的类型。 对象类型可以是具体的,也可以是抽象的,用于类型检查和类型推断。 对象类型的最基本形式:接口&…

数据库视图和索引

参考链接: 数据库的视图和索引的概念和区别_索引和视图的区别-CSDN博客 MySQL 数据库--索引(理论详解及实例演示)_数据库索引-CSDN博客 1.视图 视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念。这样&#xf…

CUDA int128相乘是怎么实现的

CUDA int128相乘是怎么实现的 一.指令对应关系1.cuda C代码2.PTX代码[二个int64]3.SASS指令[多个u32] 二.复现过程 CUDA int128相乘是怎么实现的 一.指令对应关系 1.cuda C代码 clock_t t0clock64(); __prof_trigger(0); int128_t r4r2*r3; //二个int128_t相加 __prof_trig…

Android Glide:让图片加载从未如此简单

在 Android 开发中,图片加载一直是一个关键环节。无论是从网络还是本地加载图片,都需要考虑到性能、内存管理和用户体验等多个方面。而在这方面,Glide 成为了众多开发者的首选库之一。本文将带你深入了解 Glide 的强大之处,并介绍如何在项目中快速集成和使用 Glide。 为什…

外包干了三年,快要废了。。。

先简单说一下自己的情况,普通本科,在外包干了3年多的功能测试,这几年因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不能够在这样蹉跎下去了,长时间呆在一个舒适的环境真的会…

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 1.dp定义:dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式:if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较,而是我们要取dp[j] 1的最大值…

JAVA 的excel数据批量导入解析 现在都用什么API工具 Apache POI 、EasyExcel 、easypoi有什么区别

📝个人主页🌹:个人主页 ⏩收录专栏⏪:SpringBoot 🌹🌹期待您的关注 🌹🌹,让我们共同进步! 在Java中,处理Excel数据批量导入解析时,常…

高空抛物检测算法的应用场景解析

高空抛物事件频发,对公众安全构成严重威胁。无论是居民区还是商业中心,从高层建筑中丢弃物品都可能导致人员伤亡和财产损失。传统的监控手段多以事后追溯为主,无法在事发时及时预警和干预。为应对这一难题,视觉分析技术的发展为高…

全国历年高考真题2008-2024

目录 分享链接: ⬇️⬇️⬇️ 点击下载

单元测试之mock使用

一、简介 一般程序中A类的m1方法调用B类的m2方法,而B类的m2方法又调用了C类的m3方法以此类推等等,而其中的某个方法的一些数据又需要调用其它服务或者查询数据库,一般单元测试只针对某个功能进行测试,但是如上面的情况在做单元测试…

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式:3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制:Maven & SpringBoot 多环境兼容 配置文件分类:4种 整合…

蓝桥杯4. Fizz Buzz 经典问题

题目描述 给定一个整数 NN,从 1 到 NN 按照下面的规则返回每个数: 如果这个数被 3 整除,返回 Fizz。如果这个数被 5 整除,返回 Buzz如果这个数能同时被 3 和 5 整除,返回 FizzBuzz。如果这个数既不能被 3 也不能被 5…

本地部署Llama 3.1大模型

Meta推出的Llama 3.1系列包括80亿、700亿、4050亿参数版本,上下文长度扩展至12.8万tokens,并增加了对八种语言的支持。 部署模型需要用到Ollama的一个工具,访问官方网站https://ollama.com 点击下载,选择下载你对应的操作系统下…

【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)

文章目录 前言一、定义概念 缩写1. 二、性质1.2. 三、使用步骤编译常见错误1. 没加分号2. end 写多了 编译成功的标志总结参考文献 前言 数电课设 使用 FPGAIDE 使用 Efinity 一、定义概念 缩写 1. 二、性质 1. 2. 三、使用步骤 python代码块matlab代码块c代码块编译…

C# HttpClient 实现HTTP Client 请求

为什么? C# httpclient get 请求和直接浏览器请求结果不一样 为了测试一下HTTP接口的,用C# HttpClient实现了HTTP客户端,用于从服务端获取数据。 但是遇到了问题:C# httpclient get 请求和直接浏览器请求结果不一样 初始代码如下: using var client = new HttpClient()…

手把手带你拿捏C指针(2)(含冒泡排序)

文章目录 一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、冒泡排序五、二级指针六、指针数组七、指针数组模拟二维数组 一、数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,…

工信部【信创认证】全面解读,包含信创集成项目管理师,信创规划管理师等

行业背景 国资委发布79号文件:详细规划了中央企业和国有企业信创国产化的实施路径和时间表,明确提出了到2027年100%完成信创“替代”的宏伟目标。这一政策不仅涵盖了芯片、基础软件、操作系统、中间件等重要领域,更意味着从2023年起&#xf…

微信小程序能不能有一种公共的分包,能被普通的分包引用其资源?(内有解决方案)

微信小程序中的跨分包引用与独立分包:优化加载速度和资源复用的利器 微信小程序开发过程中,开发者常常面临如何优化小程序加载速度、减少重复代码和提高资源复用率的问题。微信小程序提供了一些新的技术特性,比如跨分包引用和独立分包分包异…

5天涨粉3W!26个视频12.2W粉!AI做这种视频这么火嘛?

前几天刷到一个AI视频的账号,当时刷到时候才9W粉丝,今天又刷到他,已经12.2W了!这涨粉速度,简直了!! 26个视频,12.2万粉丝 在这个看脸的时代,内容创作者们为了吸引眼球&a…

3.js - 着色器设置点材质(螺旋星系特效)

上图 着色器设置点材质时,在顶点着色器中,最好设置gl_PointSize,不然看不到你在页面中添加的点 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlsimport gsap from gsapimp…