<
>

python Opencv计算图像相似度过程解析

2020-06-25 08:08:33 来源:易采站长站 作者:易采站长站整理

一般步骤:

缩小图片:32 * 32是一个较好的大小,这样方便DCT计算
转化为灰度图
计算DCT:利用Opencv中提供的dct()方法,注意输入的图像必须是32位浮点型,所以先利用numpy中的float32进行转换
缩小DCT:DCT计算后的矩阵是32 * 32,保留左上角的8 * 8,这些代表的图片的最低频率
计算平均值:计算缩小DCT后的所有像素点的平均值。
进一步减小DCT:大于平均值记录为1,反之记录为0.
得到信息指纹:组合64个信息位,顺序随意保持一致性。
最后比对两张图片的指纹,获得汉明距离即可。

dHash算法

相比pHash,dHash的速度要快的多,相比aHash,dHash在效率几乎相同的情况下的效果要更好,它是基于渐变实现的。

步骤:

缩小图片:收缩到9*8的大小,以便它有72的像素点

转化为灰度图

计算差异值:dHash算法工作在相邻像素之间,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值
获得指纹:如果左边的像素比右边的更亮,则记录为1,否则为0.
最后比对两张图片的指纹,获得汉明距离即可。

dHash:


#差值感知算法
def dhash(image1,image2):
image1 = cv2.resize(image1,(9,8))
image2 = cv2.resize(image2,(9,8))
gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY) #切换至灰度图
gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
hash1 = dhashcaulate(gray1)
hash2 = dhashcaulate(gray2)
return Hamming_distance(hash1,hash2)

def dhashcaulate(gray):
hash_str = ''
for i in range(8):
for j in range(8):
if gray[i, j] > gray[i, j + 1]:
hash_str = hash_str + '1'
else:
hash_str = hash_str + '0'
return hash_str

您可能感兴趣的文章:python读取和保存图片5种方法对比python 比较2张图片的相似度的方法示例Python Opencv实现图像轮廓识别功能利用OpenCV和Python实现查找图片差异

暂时禁止评论

微信扫一扫

易采站长站微信账号