当前位置:   article > 正文

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

python 图片相似度

一、图片相似比较

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

暴力方式: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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/103687
推荐阅读
相关标签
  

闽ICP备14008679号