由于最近涉及到匹配相似图片的问题,所以在此记录下解决办法:差异值哈希算法 + 颜色直方图
环境要求:Python cv2库 math库
差异值哈希算法
检索相似图片,第一个想到的就是差异值哈希算法。这个算法的步骤是:
缩小尺寸
一般将图片缩放为 8 * 8 的尺寸大小,共64个像素的图片。但是由于64个像素对于我来说,损失的细节太多所以我选择了缩放到 33 * 32 的尺寸大小
彩色图像灰度化
由于我们现有的图片是由 RGB 三原色构成,每个像素点是一个由这三个颜色组成的一个 list 。而 RGB 三个颜色中每个颜色值都是用 8 个比特来表示,大小范围是 0 ~ 255(2^8 - 1),就一共有 256 * 256 * 256 种颜色。并且作为一个像素类似于这样的数值:[253 255 255] 是不利于简单比较的,肉眼看着类似的颜色,但是它的三个颜色分布可能相差很多。所以将它灰度化,用 256 个不同的灰色表示现有的图片。由于现在用一种灰色表示三种颜色,原来每个像素是一个 list 现在就降维成一个数值,数值的大小还是比较容易比较的。
比较像素的灰度值
比较图片灰度化的每行相邻像素之间的大小,每行后面像素值大于前面一个像素值那么记为1,如果不大于则记为0
计算哈希值
根据上一步得到了由0和1构成的数组合在一起就构成了1024位的整数
对比不同图片的汉明距离
对比两个图片生成的整数有多少位不一样。一般汉明距离小于 5 ,两张图片的相似度就很高了。
差异值哈希算法的 Python 代码
import cv2
# 差异值哈希算法</