赞
踩
一、图片相似比较
本文介绍的几种实现方式:
暴力方式: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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。