python判断图片相似度_Python-OpenCV 比较图片相似度

一、图片相似比较

本文介绍的几种实现方式:

暴力方式:1.按像素比较,n越小相似度越高;2.矩阵相减,用来判断两个图是不是完全一样;hashlib.md5判断两个图是否完全一样

哈希算法:1.感知哈希算法;2.均值哈希算法;3.差值哈希算法

灰度直方图:1.单通道直方图;2. 三通道直方图

二、暴力方式

1. 按像素比较

# -*- coding: utf-8 -*-

# !/usr/bin/python

import cv2

n = 0

img1 = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)

img2 = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE)

height, width = img1.shape

for line in range(height):

for pixel in range(width):

if img1[line][pixel] != img2[line][pixel]:

n = n + 1

print(n)

2. OpenCV2 矩阵相减

两个图片完全一样时返回值为true

如果把一个图片转了格式,则结果可能不一样,因为转格式的过程中可能会进行算法处理

3. 通过hashlib.md5判断图片是否完全一样

import hashlib

a = open("test.png", "rb")

a_cp = open("test.jpg", 'rb')

cmd5 = hashlib.md5(a.read()).hexdigest()

ccmd5 = hashlib.md5(a_cp.read()).hexdigest()

print(cmd5)

if cmd5 == ccmd5:

print(True)

else:

print(False)

三、哈希算法

算法值越小,则越相似,相同图片值为0。

pHash:感知哈希。精确度比较高,但是速度方面较差一些。

aHash:平均值哈希。速度比较快,但是常常不太精确。

dHash:差异值哈希。精确度较高,且速度也非常快

1. 感知哈希算法(Perceptual hash algorithm)

步骤:

缩小图片

转为灰度图(256阶)

计算DCT:把图片分享成分率的集合,结果是32*32的矩阵

缩小DCT:保留左上角的8*8,代表图片的最低频率

计算缩小DCT后的像素点均值

大于均值记为1,反之记为0,组合64个信息位

7 比较图片指纹,获得汉明距离,即两个64位的hash值有多少位是不一样的,不相同位数越少,图片越相似。

代码

import cv2

impo

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值