在Python中,有多种方法可以用来判断两个图像的相似度。以下是一些常用的方法及其代码示例:
方法一:使用PIL库计算差异值
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}")
方法二:使用均值哈希算法
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)}")
方法三:使用互信息计算相似度
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)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/bj/141808.html