首页 > 编程语言 >Python计算两图相似性-余弦相似度

Python计算两图相似性-余弦相似度

时间:2023-12-08 16:46:32浏览次数:36  
标签:Python image vectors 余弦 两图 cp1 cp2 Image norm

1、简介

把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度。

   2、代码

from PIL import Image
from numpy import average, dot, linalg

# 对图片进行统一化处理
def get_thum(image, size=(1920, 1080), greyscale=False):
    # 利用image对图像大小重新设置, Image.ANTIALIAS为高质量的
    image = image.resize(size, Image.Resampling.LANCZOS)
    if greyscale:
        # 将图片转换为L模式,其为灰度图,其每个像素用8个bit表示
        image = image.convert('L')
    return image

# 计算图片的余弦距离
def image_similarity_vectors_via_numpy(image_cp1, image_cp2):
    image_cp1 = get_thum(image_cp1)
    image_cp2 = get_thum(image_cp2)
    images = [image_cp1, image_cp2]
    vectors = []
    norms = []
    for image in images:
        vector = []
        for pixel_tuple in image.getdata():
            vector.append(average(pixel_tuple))
        vectors.append(vector)
        # linalg = linear(线性)+algebra(代数),norm则表示范数
        # 求图片的范数
        norms.append(linalg.norm(vector, 2))
    a, b = vectors
    a_norm, b_norm = norms
    # dot返回的是点积,对二维数组(矩阵)进行计算
    res = dot(a / a_norm, b / b_norm)
    return res

image_cp1 = Image.open('WD1.png')
image_cp2 = Image.open('WD2.png')
cosine_similarity = image_similarity_vectors_via_numpy(image_cp1, image_cp2)
print('图片余弦相似度:', cosine_similarity)

 

标签:Python,image,vectors,余弦,两图,cp1,cp2,Image,norm
From: https://www.cnblogs.com/TSmagic/p/17874966.html

相关文章

  • 软件测试/人工智能|使用 Pip 管理 Python 包
    前言Python是一门强大而灵活的编程语言,其社区拥有数量庞大且多样化的第三方库和工具,这些库可以让我们在项目中快速、高效地开发。pip是Python的包管理工具,我们可以使用pip轻松地安装、升级和管理这些第三方包。什么是Pip?Pip是Python包索引(PyPI)的客户端工具,可以方便地从......
  • 软件测试/人工智能|一文告诉你Python元组相关操作
    前言当我们谈及Python数据结构时,元组(tuple)是一个重要且常用的概念。元组类似于列表,但是它是不可变的数据结构,其中的元素不能被修改。让我们深入了解一下元组的各种方面。什么是元组?在Python中,元组是由逗号分隔的值组成的有序集合。和列表类似,但不同的是,元组是不可变的,一旦创建......
  • 代码随想训练营第五十九天(Python)| 503.下一个更大元素II、42. 接雨水
    [503.下一个更大元素II]循环问题用2*n,i%n的方式n=len(nums)ans=[-1]*nstack=[]foriinrange(2*n):whilelen(stack)>0andnums[i%n]>nums[stack[-1]]:ans[stack[-1]]=nums[i%n......
  • Python制作AI贪吃蛇,很多很多细节、思路都写下来了!
    前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样)实现效果:具体功能:1.智能模式:电脑自己玩(自己吃食物)2.人机对战:电脑和人操作(在上步的基础上加一个键盘控制的贪吃蛇即可)实现环境:Pycharm+Pytho......
  • JetBrains PyCharm 2023.3 (macOS, Linux, Windows) - 面向专业开发者的 Python IDE
    JetBrainsPyCharm2023.3(macOS,Linux,Windows)-面向专业开发者的PythonIDE请访问原文链接:https://sysin.org/blog/jb-pycharm-2023/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsPyCharm-面向专业开发者的PythonIDE为什么选择PyCharm在一......
  • 在Python中,​​type()​​函数有两种用法
    在Python中,type()函数有两种用法¹²³⁴⁵:查看数据类型:当type()函数只有一个参数时,它会返回该参数的数据类型¹²³⁴⁵。例如:x=123print(type(x))#输出:<class'int'>在这个例子中,type(x)返回了x的数据类型,即<class'int'>,表示x是一个整数¹²³⁴⁵。动态创建类:当type()函......
  • Python将列表数据保存为excel
    一、需求背景工作需要将列表数据写入到excel中,方便运营同学查看,数据示例如下:data_0=[[['Name','Age','Gender'],['Jack',22,'Male'],['Tom',34,'Female']],[['id&#......
  • Python:对图片批量进行重命名
    一、对图片批量进行重命名os.listdir(path)#获取文件目录列表1、定义一个修改名称方式2、主函数定义#1、定义修改方法defrename(path):file_list=os.listdir(path)#获取文件目录列表num=len(file_list)#获取个数i=0;......
  • 【Lidar】Python实现点云CSF布料滤波算法&提取地面点
    ​    这两天会持续更新一下Python处理点云数据的教程,大家可以点个关注。今天给大家分享一下点云的经典算法:CSF布料模拟算法。1CSF算法简介        CSF算法,全称为ClothSimulationFiltering,是一种基于欧几里得空间中最小生成树思想的聚类算法,它可以很好地......
  • Frida server 和 python client下载
    前言全局说明Fridaserver和pythonclient下载安装一、相关连接server下载:最新版:https://github.com/frida/frida/releases15.2.2版:https://github.com/frida/frida/releases/tag/15.2.216.0.1版:https://github.com/frida/frida/releases/tag/16.0.1Pythonclient下载......