Python计算两图相似性-直方图
1、简介
利用直方图计算图片的相似度时,是按照颜色的全局分布情况来看待的,
无法对局部的色彩进行分析,同一张图片如果转化成为灰度图时,在计算其直方图时差距就更大了。
对于灰度图可以将图片进行等分,然后在计算图片的相似度。
2、代码
测试图片点击进行下载:Image
from PIL import Image # 将图片转化为RGB def make_regalur_image(img, size=(64, 64)): gray_image = img.resize(size).convert('RGB') return gray_image # 计算直方图 def hist_similar(lh, rh): assert len(lh) == len(rh) hist = sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r)) for l, r in zip(lh, rh)) / len(lh) return hist # 计算相似度 def calc_similar(li, ri): calc_sim = hist_similar(li.histogram(), ri.histogram()) return calc_sim if __name__ == '__main__': image_cp1 = Image.open('WD1.png') image_cp1 = make_regalur_image(image_cp1) image_cp2 = Image.open('WD2.png') image_cp2 = make_regalur_image(image_cp2) print("图片间的相似度为", calc_similar(image_cp1, image_cp2))