判断两张图片是否相似

news2024/11/30 6:44:55

判断两张图片是否相似

要判断两张图片是否相似,你可以使用多种方法,其中包括结构相似性指数(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 方法则更注重图片的整体外观。选择哪种方法取决于你的具体需求和图片的特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1824745.html

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

相关文章

远程医疗服务包含哪些服务内容?

在当今数字化时代&#xff0c;远程医疗服务正在迅速崛起&#xff0c;成为医疗保健领域的一项重要创新。通过远程医疗服务&#xff0c;患者可以足不出户就能获得医疗服务。那么远程医疗究竟能提供哪些服务呢?下面我们就来看看。 1. 远程咨询 远程咨询是远程医疗服务的基础&…

深入学习Java `synchronized` 关键字

深入学习Java synchronized 关键字 synchronized关键字通过确保在同一时间只有一个线程可以执行某个代码块&#xff0c;从而防止多个线程同时访问共享资源时发生数据不一致的问题。 修饰方法 当synchronized用于修饰实例方法时&#xff0c;表示当前实例对象是同步锁。这意味…

【C++ 11 新特性】lambda 表达式详解

文章目录 1. 常见 lambda 面试题&#x1f58a; 1. 常见 lambda 面试题&#x1f58a; &#x1f34e;① 如果⼀个 lambda 表达式作为参数传递给⼀个函数&#xff0c;那这个函数可以使⽤这个 lambda 表达式捕获的变量吗 ? &#x1f427; 函数本身无法直接访问到 lambda表达式捕获…

护眼台灯哪个品牌更好?五款市面主流的护眼台灯款式分享

近年来&#xff0c;护眼台灯的研发和创新不断推进&#xff0c;一些台灯配备了智能化功能&#xff0c;如定时开关机、自动调节光线等&#xff0c;使孩子们能够更好地控制用眼时间和光线环境。护眼台灯哪个品牌更好&#xff1f;一些高端的护眼台灯还采用了纳米光滤镜技术&#xf…

LeetCode | 35.搜索插入位置

这套题可以直接遍历&#xff0c;找到第一个大于target的数并返回其位置即可&#xff0c;但是时间复杂度为 O ( n 2 ) O(n^2) O(n2)&#xff0c;题目中明确要求时间复杂度为 O ( l o g n ) O(logn) O(logn)&#xff0c;考虑二分查找算法&#xff0c;这道题就是标准的二分查找的一…

Studio One软件最新版下载及详细安装教程

Studio One 6是一款功能丰富、专业级的音乐制作软件&#xff0c;它具备灵活的工作流程和高效的团队协作能力&#xff0c;能帮助用户实现高质量的音乐创作和制作。 智能模板更快的启动&#xff0c;全新的智能模板为你手头的任务提供了必要的工具集&#xff0c;包括基本录制、混音…

RFID技术助力资产信息数字化转型

在当前快速发展的信息化时代&#xff0c;资产信息的数字化转型对企业管理和运营具有重要意义。RFID技术作为一种先进的物联网技术&#xff0c;通过将资产信息全面数字化&#xff0c;实现高效、准确的管理和追踪&#xff0c;极大地提升了企业的运营效率和管理水平。 首先&#x…

Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开

Java版 SaaS应用接口技术RESTful API WebSocket WebService技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开 医院住院管理系统&#xff08;Hospital Information System简称HIS&#xff09;是一门医学、信息、管理、计算机等多种学科为一体的边缘科学&#xff…

进来学习Kubernetes知识点

Kubernetes集群部署 文章目录 Kubernetes集群部署一、Kubernetes概述1.1、什么是Kubernetes1.2、为什么要用Kubernetes 二、Kubernetes组件2.1、Master组件2.2、Node组件 三、Kubernetes资源对象3.1、Pod3.2、Label3.3、Replication Controller3.4、Deployment3.5、Service3.6、…

Mac M3 Pro 安装 Zookeeper-3.4.6

1、下载安装包 官方下载地址&#xff1a;https://archive.apache.org/dist/zookeeper/ 网盘下载地址&#xff1a;https://pan.baidu.com/s/1j6iy5bZkrY-GKGItenRB2w?pwdirrx 提取码: irrx 2、解压并添加环境变量 # 将安装包移动到目标目录 mv ~/Download/zookeeper-3.4.6.…

Django配置连接池:使用django-db-connection-pool配置连接池

一、该三方库文档使用 github地址&#xff1a; https://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.mdhttps://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.md1、选择指定版本&#xff0c;查看指定版本的文档和配置&am…

层出不穷的大模型产品:使用体验、倾向选择及未来展望

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

Makefile-快速掌握

引用 本文完全参照大佬的文档写的&#xff0c;写这篇文章只是为了梳理一下知识 https://github.com/marmotedu/geekbang-go/blob/master/makefile/Makefile%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md 介绍 Makefile是一个工程文件的编译规则&#xff0c;描述了整个工程的编译…

Vue I18n国际化插件

Vue I18n国际化插件 安装目录结构及文件内容./locales/lang/zh.js./locales/lang/en.js./locales/index.js main.js引入页面具体使用及语言切换&#xff08;Vue3&#xff09;刷新保存原语言&#xff0c;App.vue添加路由守卫注意点 中文文档&#xff1a; https://kazupon.githu…

源代码防泄密的方法有哪些?

在当今发展潮流中&#xff0c;网络信息安全隐患变得越来越突出&#xff0c;信息泄漏事件时有发生。我们都知道&#xff0c;电子文件非常容易复制&#xff0c;可以通过各种途径如邮件、光盘、U盘、网络存储等进行传播。企事业单位的机密文件、研发源代码、图纸等核心技术机密资料…

vxe-table表格新增节点

做前端的朋友可以参考下&#xff1a;也可结合实际需求查看相应的官方文档 效果图 附上完整代码 <template><div><vxe-toolbar ref"toolbarRef" :refresh"{queryMethod: searchMethod}" export print custom><template #buttons>&…

「计算机网络」初识http协议

前言 HTTP协议——互联网发展的基石&#xff0c;从一个最简单的“helloworld”网页&#xff0c;到现在博客平台、视频网站都离不开HTTP协议的存在。随着互联网的发展&#xff0c;Web网页的设计也越发复杂&#xff0c;前后端开发的分工也越发明确&#xff0c;HTTP作为连接前后端…

扣子arixv论文检索工作流开源(Sam老师作品)

因为在扣子上找不到好用的AI论文检索Bot&#xff0c;之前借助工作流和arxiv.org API开发了一个工具&#xff0c;当时写了一篇介绍。 核心流程比较简单&#xff0c;但有很多同学咨询了解&#xff0c;今天抽了点时间把工作流完全开源了。为了方便对比&#xff0c;在公共Team中通过…

pytest + yaml 框架 - 65.Pycharm 设置 yaml 格式用例模板,高效写用例

前言 初学者对yaml 格式不太熟悉,自己写yaml用例的时候,总是格式对不齐,或者有些关键字会忘记。 于是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。 pycharm设置用例模板 File - Settings Live Templates - python 点 + 号…

RabbitMQ实践——交换器(Exchange)绑定交换器

在《RabbitMQ实践——交换器&#xff08;Exchange&#xff09;和绑定&#xff08;Banding&#xff09;》一文中&#xff0c;我们实验了各种交换器。我们可以把交换器看成消息发布的入口&#xff0c;而消息路由规则则是由“绑定关系”&#xff08;Banding&#xff09;来定义&…