python 对比两张图片是否相同

python 对比两张图片是否相同

说明

  1. 适用于对比两张图片是否完全相同
  2. 需要两张图片的大小完全一致

代码来源于网络,进行微调

from PIL import Image
from PIL import ImageChops


def compare_images(path_one, path_two):
    """
    比较图片
    :param path_one: 第一张图片的路径
    :param path_two: 第二张图片的路径
    :return: 相同返回 success
    """
    image_one = Image.open(path_one)
    image_two = Image.open(path_two)
    try:
        diff = ImageChops.difference(image_one, image_two)

        if diff.getbbox() is None:
            # 图片间没有任何不同则直接退出
            return "success"
        else:
            return "ERROR: 匹配失败!"

    except ValueError as e:
        return "{0}\n{1}".format(e, "图片大小和box对应的宽度不一致!")


if __name__ == '__main__':
    compare_images(
        'target.png',
        'template.jpg',
    )

### 使用Python进行两张图片的相似度对比Python中,可以利用`scikit-image`库中的`compare_ssim()`函数来计算两张图片之间的结构相似指数(Structural Similarity Index, SSIM)。该方法不仅返回个表示相似的分数,还提供了张显示两图差别的图像。SSIM得分范围为[-1, 1],越接近于1则表明两张图片越相似。 以下是基于`scikit-image`和`OpenCV`实现的代码示例: ```python import cv2 import numpy as np from skimage.metrics import structural_similarity as ssim def compare_images(imageA, imageB): # 转换为灰度图像 grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY) grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY) # 计算SSIM并获取差异图像 score, diff = ssim(grayA, grayB, full=True) # 计算SSIM值以及差异图像 diff = (diff * 255).astype("uint8") # 差异图像转换为0-255范围内的整数形式 return score, diff # 加载图像 image1 = cv2.imread('image1.jpg') image2 = cv2.imread('image2.jpg') score, diff_image = compare_images(image1, image2) print(f"SSIM Score: {score}") # 打印SSIM分数[^1] # 显示差异图像 cv2.imshow("Difference Image", diff_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此脚本首先加载两张待比较的彩色图像,并将其转化为灰度模式以便处理。接着调用`ssim()`函数得到SSIM评分与差异图像矩阵。最后展示这些结果给用户查看。 如果遇到无法从`skimage.measure`模块导入`compare_ssim`的情况,则是因为新版本的`scikit-image`已经调整了API路径,应改为从`skimage.metrics`引入相应功能[^4]。 对于更复杂的场景比如视频帧间的相似度评估,可逐帧读取视频流并通过相同逻辑执行操作,进而求平均值得到整体相似程度指标[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值