Python 之图片对比
转自: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)
直方图方法三:
from
PILimportImage
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 之图片对比相关推荐
- python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式
最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...
- 用openCV 和 Python 实现图片对比,并标识出不同点
最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...
- Python实现图片对比
以下内容转载自大牛该大牛,链接点击跳转 具体实现逻辑:使用第三方的控件,将两张图片进行对比,两张图片的尺寸必须一致.然后才能对比. # USAGE # python image_diff.py --f ...
- python简单图片对比
# -*- coding: utf-8 -*- import cv2,os import time import numpy as np from matplotlib import pyplot a ...
- python图片比对、自动化测试_基于python+appium通过图片对比来做的UI自动化
1.python + appium +图片对比实现UI自动化: 背景: 当手机需要适配不同的语言时,测试过程中易出现因为语言不熟悉,导致UIbug被遗漏(例如setting中的描述性文字显示不完整等等 ...
- python图像对比_python+PIL实现图片对比(一)
前提 前阵子报了个班,学了一些android UI自动化相关的东西,于是想到第一家单位在做android手机自动化的时候,有用到图片对比,来确定是否点到指定的页面,遂想在appium+python做U ...
- Python学习之图片对比和识别小记
因工作中需要对视频图片做处理,于是就把应用得到的几个需求功能在网上solo了一波. 一.图片对比 主要应用的库Image,函数Image.size(),resize(),convert(),getpi ...
- cv2 和 matplotlib.pyplot 和 PIL.Image 读取图片方式对比【Python读取图片】
文章目录 import matplotlib.pyplot as plt 和 cv2 读取图像对比 PIL 和 cv2 读取图片对比 mxnet.image.imread 读取图片 PIL 和 tor ...
- 安卓自动化之uiautomator(python篇)常用adb及图片对比
学完前面的几节知识后,发觉uiautomator里面的方法并不能完全满足我们的要求,因此我们需要其他的东西来帮助我们解决问题 1.图片对比(当有些控件不能识别的时候,比如设置两次壁纸是否一样,我们就可 ...
- python识别图片指定位置文字_python批量识别图片指定区域文字内容
Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...
最新文章
- 键盘各个键对应的ASCLL值
- 洛谷——P1583 魔法照片
- 18行代码AC——PTA 二叉树的遍历 (10分)——解题报告
- sync不生效 vue_Vue实战项目-记账器-重要知识点汇总
- Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
- sublime 关闭自动更新
- 最大化/最小化/关闭窗口代码集锦
- Shell编程之通配符
- FCN模型和loss实现(code)
- viper4android最新,ViPER4Android FX音效驱动下载-ViPER4Android音效驱动 v2.4.0.1 正式版_手机乐园...
- Java内存模型与共享变量可见性
- 在Android开发中如何移除EditText上的输入焦点
- Android得到位图方式
- Oracle查询锁表
- Unity 中的随机数!
- 市值4000亿,超越京东小米!8年奋斗狂奔美团终于上市了
- 五阶最小二乘+迭代方法曲线拟合
- 梅科尔工作室-李柯增-鸿蒙笔记4
- 希尔伯特《几何学基础》的章节目录
- 国内哪家云服务器好?