python判断相等_图片相似度识别软件

python判断相等_图片相似度识别软件在 Python 中 有多种方法可以用来判断两个图像的相似度 以下是一些常用的方法及其代码示例 方法一 使用 PIL 库计算差异值 pythonfrom PIL import Image 打开两张图片 image1 Image open image1 jpg image2 Image open image2 jpg 将图片转换为相同的模式 例如 RGB image1

在Python中,有多种方法可以用来判断两个图像的相似度。以下是一些常用的方法及其代码示例:

方法一:使用PIL库计算差异值

python

from PIL import Image

打开两张图片

image1 = Image.open('image1.jpg')

image2 = Image.open('image2.jpg')

将图片转换为相同的模式(例如RGB)

image1 = image1.convert('RGB')

image2 = image2.convert('RGB')

计算差异值

diff = ImageChops.difference(image1, image2)

计算差异值的总和

diff_sum = sum(diff.getdata())

计算相似度(差异值总和越小,相似度越高)

similarity = 1 - diff_sum / diff.size * diff.size

print(f"Similarity: {similarity}")

方法二:使用均值哈希算法

python

import cv2

import numpy as np

def aHash(img):

img = cv2.resize(img, (8, 8), interpolation=cv2.INTER_CUBIC)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

avg = np.mean(gray)

hash_str = ''

for i in range(8):

for j in range(8):

if gray[i, j] > avg:

hash_str += '1'

else:

hash_str += '0'

return hash_str

def dHash(img):

img = cv2.resize(img, (9, 8), interpolation=cv2.INTER_CUBIC)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

hash_str = ''

for i in range(8):

for j in range(8):

if gray[i, j] > np.mean(gray[i:i+8, j:j+8]):

hash_str += '1'

else:

hash_str += '0'

return hash_str

计算两个图像的哈希值并比较

hash1 = aHash(cv2.imread('image1.jpg'))

hash2 = aHash(cv2.imread('image2.jpg'))

print(f"aHash similarity: {1 - sum(h1 != h2 for h1, h2 in zip(hash1, hash2)) / len(hash1)}")

方法三:使用互信息计算相似度

python

from sklearn import metrics as mr

import imageio

import numpy as np

读取图片

img_cp1 = imageio.imread('WD1.png')

img_cp2 = imageio.imread('WD2.png')

调整图片尺寸

img_cp2 = np.resize(img_cp2, (img_cp1.shape, img_cp1.shape, img_cp1.shape))

将图片展平为一维数组

img_cp1 = np.reshape(img_cp1, -1)

img_cp2 = np.reshape(img_cp2, -1)

计算互信息

mutual_info = mr.mutual_info_score(img_cp1, img_cp2)

print(f"Mutual Information: {mutual_info}")

方法四:使用结构相似性指数(SSIM)

编程小号
上一篇 2025-04-05 21:49
下一篇 2026-04-26 15:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/bj/51218.html