python之对比两张图像的相似度

这篇具有很好参考价值的文章主要介绍了python之对比两张图像的相似度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python之图像背景识别

本着结合实际工作,实际落地并已应用的态度去码文。

python之对比两张图像的相似度

需求:在某个手机端项目中,有多个页面图片,但每个图片都做了相应的修改,由于这种图片非常多,高达上万张,每周有新的内容出现且需要回归。

在某些特定的节点,不允许相邻两张出现一模一样的图片,如果人去判定,非常非常耗时,于是需要自动化筛选,人工复核。

得,又接了一个非专业技能内的活,咋办,硬着头皮上?

那肯定不行,因为我不会;

但专业职场人怎么能说自己不会,不能!你得说,我可以学!

于是乎,我开始查找资料开始学习,找了一大圈,发现,AirTest里面就有这么一个API能够满足我的需求。拿来吧你,嘿嘿~

大致捋一下,所有页面图片通过自动化进行截图,在某些特定节点对图片命名中加入下划线作为区分,单独拿出特定节点的图片进行两两比较。

python之对比两张图像的相似度

代码如下:[增加了日志追加写入并换行记录]

makeFolderResult方法为创建日志文件夹。

writeLog方法为将对比失败的图片名称写入日志中。[该日志将会直接写入目标图片路径根目录]

imageCompare方法为实际对比逻辑,阈值范围为0~1,越接近1表示图片相似度越高。

from airtest.aircv.cal_confidence import *

def makeFolderResult(imgPath, logName):
    logFloder = os.path.join(imgPath, f'图片对比结果')
    os.mkdir(logFloder)
    logPath = os.path.join(imgPath, f'图片对比结果/{logName}')
    return logPath

def wirteLog(msg, logPath):
    with open(logPath, "a+", encoding='utf-8') as f:
        f.write(msg)
        f.write("\n")

def imageCompare(imagePath, logPath,threshold:int):
    '''
    :param imagePath: 图片存放的路径
    :param logPath: 日志存放的路径
    :param threshold: 阈值,指定int类型
    :return: 
    '''
    needCompareImgDict = {}
    for root, dirs, files in os.walk(imagePath):
        for file in files:
            if "_" in file:
                key = str(file).split("_")[0]
                if key not in needCompareImgDict.keys():
                    needCompareImgDict[key] = [os.path.join(root, file)]
                else:
                    tempList = needCompareImgDict[key]
                    tempList.append(os.path.join(root, file))
                    needCompareImgDict[key] = tempList
    #### 遍历字典,将同个ID下的图片进行对比
    for imgs in needCompareImgDict.values():
        for i in range(len(imgs) - 1):
            img_1_path = imgs[i]
            img_2_path = imgs[i + 1]
            img_1_Name = img_1_path.split("\\")[-1]
            img_2_Name = img_2_path.split("\\")[-1]
            img1 = cv2.resize(cv2.imread(img_1_path), (370, 800)) # 图片尺寸根据实际图片写入
            img2 = cv2.resize(cv2.imread(img_2_path), (370, 800))
            confidence = cal_ccoeff_confidence(img1, img2)
            if confidence > threshold:
                writeMsg = f"【对比失败】,疑似 {img_1_Name}{img_2_Name} 两张图片一致,相似度为:{round(confidence * 100, 2)}%"
                wirteLog(writeMsg, logPath)
                print(writeMsg)
            else:
                pass

if __name__ == '__main__':
    imagePath = "填入你图片存放的路径"
    logName = str(imagePath.split("\\")[-1]) + ".txt"
    logPath = makeFolderResult(imagePath, logName)
    imageCompare(imagePath, logPath)

cal_ccoeff_confidence这个API是核心,源码如下:

import cv2
import numpy as np
from .utils import img_mat_rgb_2_gray


def cal_ccoeff_confidence(im_source, im_search):
    """求取两张图片的可信度,使用TM_CCOEFF_NORMED方法."""
    # 扩展置信度计算区域
    im_source = cv2.copyMakeBorder(im_source, 10,10,10,10,cv2.BORDER_REPLICATE)
    # 加入取值范围干扰,防止算法过于放大微小差异
    im_source[0,0] = 0
    im_source[0,1] = 255

    im_source, im_search = img_mat_rgb_2_gray(im_source), img_mat_rgb_2_gray(im_search)
    res = cv2.matchTemplate(im_source, im_search, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    return max_val

有兴趣的小伙伴可以自己研究,没兴趣的如果遇到了,拿来就直接用。文章来源地址https://www.toymoban.com/news/detail-466459.html

到了这里,关于python之对比两张图像的相似度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用openCV比对任意两张图片的相似度(亲测较准确)

    方案:使用openCV中的直方图算法做对比。测试效果较好。 代码中提供了均方差算法(MSE)、结构相似性指数算法(SSIM)、峰值信噪比(PSNR)、直方图算法。其中直方图效果最好 Exception in thread \\\"main\\\" java . lang . UnsatisfiedLinkError : no opencv_java455 in java . library . path Exception in threa

    2024年02月16日
    浏览(26)
  • 用python对比两种图片的相似程度

    要比较两张图片的相似程度,通常可以使用图像处理库如OpenCV或Pillow。其中的一些方法包括: 均方误差(Mean Square Error, MSE):计算两张图片的每个像素值之间的平均差值,结果越小表示两张图片越相似。 结构相似性指数(Structural Similarity Index, SSIM):比较两张图片的结构、

    2024年02月15日
    浏览(25)
  • 使用MATLAB对比两张图片的一致性

    可以使用 MATLAB 的图像处理工具箱进行两张图片的比较。具体地,可以使用函数 corr2 计算两张图像的相关系数,从而评估它们的一致性。如果相关系数较高,说明图像的相似度较高;如果相关系数较低,说明图像的差异较大。 可以这样实现: 在上述代码中, img1 和 img2 分别

    2024年02月12日
    浏览(27)
  • python计算模板图像与原图像各区域的相似度

    目录 1、解释说明: 2、使用示例: 3、注意事项: 在Python中,我们可以使用OpenCV库进行图像处理和计算机视觉任务。其中,模板匹配是一种常见的方法,用于在一幅图像中识别出与给定模板图像相似的区域。模板匹配的原理是将模板图像在原图像上滑动,计算模板图像与原图

    2024年02月12日
    浏览(31)
  • 2、合并两张图像

    目录 CV实现 PIL实现 使用一个函数实现两张图像合并,通过参数指定合并方式(水平或垂直或加权)。

    2024年01月16日
    浏览(19)
  • Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(57)
  • 🔥🔥Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(55)
  • python数字图像处理基础(十)——背景建模

    背景建模是计算机视觉和图像处理中的一项关键技术,用于提取视频中的前景对象。在视频监控、运动检测和行为分析等领域中,背景建模被广泛应用。其基本思想是通过对视频序列中的像素进行建模,找到视频中的静态背景,并将不同的像素标记为背景和前景,从而使后续

    2024年01月19日
    浏览(51)
  • Python实现图像对比度增强

    Python实现图像对比度增强 在数字图像处理中,对比度增强被广泛运用于图像增强、图像去噪、特征提取等领域。本文将用Python实现一种简单的图像对比度增强方法,并提供源代码。 首先,我们需要导入必要的库:numpy和OpenCV。在执行之前确保已安装这两个库。 以下是我们实

    2024年02月07日
    浏览(35)
  • 基于Python的语义视频搜索:使用结构化相似度测量指数(SSMI)和图像字幕网络实现的分步解析与实战示例

    在如今这个视频信息愈加丰富的时代,如何有效地搜索、分析和管理大量的视频数据变得越来越重要。本文旨在解释我们如何使用Python和一些先进的计算机视觉技术来实现对视频库的语义搜索,即,我们可以通过自动生成的摘要来搜索视频数据库。 在这个过程中,我们首先将

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包