安装:

2021.11.29更新

pip install scikit-image

from skimage.metrics import structural_similarity as ssim
import cv2import numpy as npimg1 = cv2.imread('1.jpg')
img2 = cv2.imread('2.jpg')img2 = np.resize(img2, (img1.shape[0], img1.shape[1], img1.shape[2]))print(img2.shape)
print(img1.shape)
ssim = ssim(img1, img2, multichannel=True)print(ssim)

有一次报错了:

"win_size exceeds image extent.  If the input is a multichannel "
ValueError: win_size exceeds image extent.  If the input is a multichannel (color) image, set multichannel=True.

调试发现相似度的输入图片宽高必须大于6

随机数图片测试:

import numpy as np
import cv2
from skimage.metrics import structural_similarity as ssimadef main():# 1.创建白色背景图片d = 400img = np.ones((d, d, 3), np.uint8) * 255# 2.循环随机绘制实心圆for i in range(0, 100):# 随机中心点center_x = np.random.randint(0, high=d)center_y = np.random.randint(0, high=d)# 随机半径与颜色radius = np.random.randint(5, high=d/5)color = np.random.randint(0, high=256, size=(3, )).tolist()cv2.circle(img, (center_x, center_y), radius, color, -1)h_h=7img1=img[:h_h,:h_h]img2=img[h_h:h_h*2,h_h:h_h*2]ssim = ssima(img1, img2, multichannel=True)print(ssim)# 3.显示结果cv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()if __name__ == '__main__':main()

二、余弦距离

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。两个向量越相似夹角越小,余弦值越接近1。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上

import numpy as np
from scipy.spatial.distance import pdist
x=np.random.random(10)
y=np.random.random(10)# 代码实现方法一
dist1 = 1 - np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))
# 代码实现方法二
dist2 = pdist(np.vstack([x,y]),'cosine')print('x',x)
print('y',y)
print('dist1',dist1)
print('dist2',dist2)

三、汉明距离(效率高,计算速度快)

汉明距离表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。

向量相似度越高,对应的汉明距离越小。如10001001和10010001有2位不同。

#比较两张图片的相似度
from PIL import Image
from functools import reduce
import time# 计算Hash
def phash(img):img = img.resize((8, 8), Image.ANTIALIAS).convert('L')avg = reduce(lambda x, y: x + y, img.getdata()) / 64.return reduce(lambda x, y: x | (y[1] << y[0]),enumerate(map(lambda i: 0 if i < avg else 1, img.getdata())),0)
# 计算汉明距离
def hamming_distance(a, b):return bin(a ^ b).count('1')
# 计算图片相似度
def is_imgs_similar(img1, img2):return True if hamming_distance(phash(img1), phash(img2)) <= 5 else False
if __name__ == '__main__':img1_path = 'F:\\project_py\\my_study\\Image\\003.jpg'img2_path = "F:\\project_py\\my_study\\Image\\006.jpg"img1 = Image.open(img1_path)img2 = Image.open(img2_path)start_time =time.time()a = is_imgs_similar(img1, img2)end_time = time.time()print(a,end_time-start_time)

sklearn 图片相似相关推荐

  1. python bp神经网络分类预测结果图_深度学习入门(四)BP神经网络——数字分类...

    采用的是python中机器学习库sklearn图片数据 sklearn简要介绍: #sklearn是Python中的一个机器学习包 from sklearn.datasets import load_ ...

  2. ML之SVM:调用(sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集)来精确实现人脸识别并提取人脸特征向量

    ML之SVM:调用(sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集)来精确实现人脸识别并提取人脸特征向量 目录 输出结果 代码设计 输出结果 代码设计 from __fu ...

  3. DL之NN:基于(sklearn自带手写数字图片识别数据集)+自定义NN类(三层64→100→10)实现97.5%准确率

    DL之NN:基于(sklearn自带手写数字图片识别数据集)+自定义NN类(三层64→100→10)实现97.5%准确率 目录 输出结果 核心代码 输出结果 核心代码 #DL之NN:基于sklearn ...

  4. DL之DNN:利用DNN算法对mnist手写数字图片识别数据集(sklearn自带,1797*64)训练、预测(95%)

    DL之DNN:利用DNN算法对mnist手写数字图片识别数据集(sklearn自带,1797*64)训练.预测(95%) 目录 数据集展示 输出结果 设计代码 数据集展示 先查看sklearn自带di ...

  5. TF之CNN:利用sklearn(自带手写数字图片识别数据集)使用dropout解决学习中overfitting的问题+Tensorboard显示变化曲线

    TF之CNN:利用sklearn(自带手写数字图片识别数据集)使用dropout解决学习中overfitting的问题+Tensorboard显示变化曲线 目录 输出结果 设计代码 输出结果 设计代码 ...

  6. sklearn识别单张自定义手写数字图片

    sklearn内置了手写数字的数据集digits.此数据集的官方介绍在这里.摘录如下: Each datapoint is a 8x8 image of a digit. Classes 10 Sam ...

  7. Python+sklearn使用支持向量机算法实现数字图片分类

    关于支持向量机的理论知识,大家可以查阅机器学习之类的书籍或网上资源,本文主要介绍如何使用Python扩展库sklearn中的支持向量机实现数字图片分类. 1.首先编写代码生成一定数量的含有数字的图片 ...

  8. 画出降维后的图片_机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD...

    PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...

  9. sklearn下绕过graph.rende查看图片

    问题背景 原始代码 file = pd.read_csv("train.csv") feature_names = ["is_login","view ...

最新文章

  1. C#反射调用 异常信息:Ambiguous match found.
  2. sdut 1730 数字三角形问题
  3. HDU 3605Escape(缩点+网络流之最大流)
  4. python indices_python numpy triu_indices函数
  5. shell判断文件,目录是否存在或者具有权限 (转载)
  6. SVG SMIL animation动画详解
  7. 电脑族每天必须吃的食品
  8. 10分钟体验一把Kafka[测试用例]
  9. Chapter 20 磁场对电流的作用
  10. 关于sentaurus使用感
  11. 喜欢蓝蓝的天空白白的云。这首《 Blue Skies》就是啦。
  12. php 长链接生成短链接
  13. 树莓派CM4+CM IO上手,查看DDR和eMMC容量
  14. cocos creator快速上手《摘星星》官方教程续|星月爸爸
  15. x:Name与x:Key
  16. STC89C52 使用 LCD 1602
  17. [论文阅读] (12)英文论文引言introduction如何撰写及精句摘抄——以入侵检测系统(IDS)为例
  18. 树的结点数+蒲丰投针概率
  19. Laravel之路由请求方式、路由传参
  20. Java实现员工管理系统

热门文章

  1. 为什么ppt图形卡配置不正确_电脑配置 | 赛博朋克2077什么配置能玩
  2. 华为手机获取状态栏高度是错误的_华为后置指纹这么多功能,你不会还以为只能解锁和支付吧...
  3. jsp+ajax+servlet+sqlserver实现分页查询_SXT DAY063 分页
  4. python 设计模式 原型模式_python设计模式–原型模式
  5. 把代码放到服务器文件夹,怎么将本地代码传到云服务器
  6. 两款自动检测代码工具与插件,开源真香
  7. 一个用Spring Boot做的垃圾分类小程序,你不拿来学习一下?
  8. 每日一皮:开会不关微信的尴尬(1)
  9. 四种常见的系统架构,目前你处于哪个阶段呢?
  10. 每日一皮:我觉得明明很好用啊,谁知道客户是这样用的呢?