转自:https://testerhome.com/topics/4539

在2年前我发过一个帖子,就是说图片相似度的。总体来讲,最近工作上绕了一圈又回到了这里。所以就开个帖子再来说下,让更多的同学能够去使用。

在图片处理上其实还是需要用到一个库,前两天社区还有朋友说到——PILLOW。聊下PILLOW吧,前身是PIL,PIL可以非常简单的将一个图 片直接转换成像素点的一个集合。就比如Python中提供简单的API可以直接将一张300*200的图转换成由300*200个RGBA数据组成的 tuple。我们拿到像素点之后想怎么比较就是可以自定义以及算法的事儿了。

这里直接切入主题就来说方法了,也推荐大家一个github库参考。
直方图的话是将图片转换成一个队列,通过这个队列的相似度来判断图片的相似度的。但是直方图本身优点缺点都很明显。优点的话就是对比的结果很直观,而且天 生支持模糊对比。但是缺点就是直方图其实不够智能,因为大多都是像素点上的颜色分布来做对比的,却没有任何算法和模型上的支持,导致精准度其实不高(但其 实也是比较特殊的情况下才可能被误导)
比如下面的两张图:

我们调用如下的代码能够直观的看到两张图的直方图的对比的结果:

import matplotlib.pyplot as plt from pylab import *from PIL
import Image
import math
import operator
image1 = Image.open('1.JPG')
image2 = Image.open('2.JPG')
plot(image1.histogram(),linewidth=2)
plot(image2.histogram(),linewidth=2)
show()

结果就很直观了。

我们还是说下缺点,这个图你们也看到了,几乎可以说是差不多了,所以直方图的结果曲线吻合度还是很高的。但是同样的,这张图是蓝色和绿色偏多,如果说是一个穿着天蓝色内裤,绿色大衣的姑娘的图片,也许直方图出来的结果差不多。so,你们明白啥意思了吧

直方图方法一:
这个也是我最常用的,Google出来的方法:


#sudo pip install PIL

def pil_image_similarity(filepath1, filepath2):

from PIL import Image

import math

import operator

image1 = Image.open(filepath1)

image2 = Image.open(filepath2)

#    image1 = get_thumbnail(img1)

#    image2 = get_thumbnail(img2)

h1 = image1.histogram()

h2 = image2.histogram()

rms = math.sqrt(reduce(operator.add,  list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )

return rms

直方图方法二:

fromPILimportImage
defclassfiy_histogram(image1,image2,size=(256,256)):     image1=image1.resize(size).convert("RGB")   g=image1.histogram()     
image2=image2.resize(size).convert("RGB")   s=image2.histogram()     
assertlen(g)==len(s),"error"     
data=[]    forindexinrange(0,len(g)):        ifg[index]!=s[index]:            
data.append(1-abs(g[index]-s[index])/max(g[index],s[index]))       else:            
data.append(1)    returnsum(data)/len(g)

直方图方法三:

fromPILimportImage  
defcalculate(image1,image2):    
g=image1.histogram()   s=image2.histogram()   assertlen(g)==len(s),"error"    data=[]     forindexinrange(0,len(g)):        ifg[index]!=s[index]:            
data.append(1-abs(g[index]-s[index])/max(g[index],s[index]))        else:            
data.append(1)     returnsum(data)/len(g) defsplit_imgae(image,part_size):    
pw,ph=part_size    
w,h=image.size    sub_image_list=[]    assertw%pw==h%ph==0,"error"     foriinrange(0,w,pw):        forjinrange(0,h,ph):            
sub_image=image.crop((i,j,i+pw,j+ph)).copy()            
sub_image_list.append(sub_image)     
returnsub_image_list defclassfiy_histogram_with_split(image1,image2,size=(256,256),part_size=(64,64)):     
image1=image1.resize(size).convert("RGB")    sub_image1=split_imgae(image1,part_size)     
image2=image2.resize(size).convert("RGB")    
sub_image2=split_imgae(image2,part_size)    sub_data=0;    
forim1,im2inzip(sub_image1,sub_image2):       sub_data+=calculate(im1,im2)     
x=size[0]/part_size[0]    y=size[1]/part_size[1]     
pre=round((sub_data/(x*y)),3)   return  pre __all__=[classfiy_histogram_with_split]

更多的方法可见:https://github.com/monkeytest15/Learn-to-identify-similar-images。这个也是前几天找到的,感谢作者

转载于:https://www.cnblogs.com/eagleking0318/p/6520733.html

Python 之图片对比相关推荐

  1. python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式

    最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...

  2. 用openCV 和 Python 实现图片对比,并标识出不同点

    最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...

  3. Python实现图片对比

    以下内容转载自大牛该大牛,链接点击跳转 具体实现逻辑:使用第三方的控件,将两张图片进行对比,两张图片的尺寸必须一致.然后才能对比. # USAGE # python image_diff.py --f ...

  4. python简单图片对比

    # -*- coding: utf-8 -*- import cv2,os import time import numpy as np from matplotlib import pyplot a ...

  5. python图片比对、自动化测试_基于python+appium通过图片对比来做的UI自动化

    1.python + appium +图片对比实现UI自动化: 背景: 当手机需要适配不同的语言时,测试过程中易出现因为语言不熟悉,导致UIbug被遗漏(例如setting中的描述性文字显示不完整等等 ...

  6. python图像对比_python+PIL实现图片对比(一)

    前提 前阵子报了个班,学了一些android UI自动化相关的东西,于是想到第一家单位在做android手机自动化的时候,有用到图片对比,来确定是否点到指定的页面,遂想在appium+python做U ...

  7. Python学习之图片对比和识别小记

    因工作中需要对视频图片做处理,于是就把应用得到的几个需求功能在网上solo了一波. 一.图片对比 主要应用的库Image,函数Image.size(),resize(),convert(),getpi ...

  8. cv2 和 matplotlib.pyplot 和 PIL.Image 读取图片方式对比【Python读取图片】

    文章目录 import matplotlib.pyplot as plt 和 cv2 读取图像对比 PIL 和 cv2 读取图片对比 mxnet.image.imread 读取图片 PIL 和 tor ...

  9. 安卓自动化之uiautomator(python篇)常用adb及图片对比

    学完前面的几节知识后,发觉uiautomator里面的方法并不能完全满足我们的要求,因此我们需要其他的东西来帮助我们解决问题 1.图片对比(当有些控件不能识别的时候,比如设置两次壁纸是否一样,我们就可 ...

  10. python识别图片指定位置文字_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

最新文章

  1. 键盘各个键对应的ASCLL值
  2. 洛谷——P1583 魔法照片
  3. 18行代码AC——PTA 二叉树的遍历 (10分)——解题报告
  4. sync不生效 vue_Vue实战项目-记账器-重要知识点汇总
  5. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
  6. sublime 关闭自动更新
  7. 最大化/最小化/关闭窗口代码集锦
  8. Shell编程之通配符
  9. FCN模型和loss实现(code)
  10. viper4android最新,ViPER4Android FX音效驱动下载-ViPER4Android音效驱动 v2.4.0.1 正式版_手机乐园...
  11. Java内存模型与共享变量可见性
  12. 在Android开发中如何移除EditText上的输入焦点
  13. Android得到位图方式
  14. Oracle查询锁表
  15. Unity 中的随机数!
  16. 市值4000亿,超越京东小米!8年奋斗狂奔美团终于上市了
  17. 五阶最小二乘+迭代方法曲线拟合
  18. 梅科尔工作室-李柯增-鸿蒙笔记4
  19. 希尔伯特《几何学基础》的章节目录
  20. 国内哪家云服务器好?

热门文章

  1. 基于MATLAB 关于圆的研究
  2. Tensorflow教程2:使用卷积神经网络的图像分类器
  3. java求解一给定数字的二进制表达中的1的个数
  4. 八大机器学习框架对比及Tensorflow的优势
  5. 2021-06-25绝对定位的理解
  6. linux 隐藏字符 h,webpack手动配置
  7. Java 线程 fork join 是什么 怎么用
  8. java 缓存ech_java ehcache 分布式缓存配置实例 .
  9. JavaSE基础——面向对象
  10. h5 img js 点击图片放大_jquery – HTML5 Canvas调整图像点击放大