python之图像背景识别

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

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

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

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

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

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

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

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

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

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

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 logPathdef 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:passif __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_graydef 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] = 0im_source[0,1] = 255im_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

有兴趣的小伙伴可以自己研究,没兴趣的如果遇到了,拿来就直接用。

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

  1. OpenCV图像处理——对比两张图像差异的位置并标记

    前言 1.有一个小游戏,就给出两张内容几乎差不多全部相同的图像,让大家在最快的时间内找出两个图像中有几处不同地方,我这里试着用OpenCV实现这个功能. 2.我的编程环境是Windows 10 64位 ...

  2. python图像对比_用python实现对比两张图片的不同

    from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_lo ...

  3. opencv求两张图像光流_OpenCV单应性矩阵发现参数估算方法详解

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 单应性矩阵计算函数与应用 OpenCV在通过特征描述子完成描述子匹配之后,会得到一些关键点对,我们会把这些关键 ...

  4. 【OpenCV 例程200篇】17. 两张图像的渐变切换

    [OpenCV 例程200篇]17. 两张图像的渐变切换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 函数 cv2 ...

  5. 图片找茬游戏——使用OpenCV查找两张图像的不同处并标记

    前言 有个小游戏,就是给出两张只有轻微的几处差异的图像,让大家来找出图像中的不同之处,之前曾经玩过,发现游戏明明告诉你有几处不同,但你什么也找不全,比如下面的几组图像,这几组图像每组都有三个不同的地方 ...

  6. 对比两张表的数据并筛选出数据不同的

    描述: 表A和表B的主键A1和B1是相同的,现在需要A2和B2比较,A3和B3比较,将A2不等于B2和A3不等于B3的数据从表A中筛选出来.这样的SQL语句怎么写? SQL语句对比两张表的数据并筛选出 ...

  7. Python实现对比两个Excel数据内容并标出不同

    导读 日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可 ...

  8. 计算两张图像之间的PSNR和SSIM值

    计算两张图像之间的PSNR和SSIM值 from skimage.metrics import mean_squared_error as mse from skimage.metrics impor ...

  9. python快速对比两个excel的数据是否一致

    python快速对比两个excel的数据是否一致 功能概述 导入包 封装函数 程序开始 功能概述 两个sheet里面的表头有部分不一致,但是数据对应的内容是一致的,因此需要匹配表格多的值是否一致. 输 ...

最新文章

  1. ug二次开发环境可以用c语言吗,NX二次开发(1):开发环境配置
  2. 杭州中国移动java待遇_【中国移动杭州研发中心Java面试】移动杭研社招java中级面试-看准网...
  3. View是如何被添加到屏幕窗口上的
  4. python中filter函数的使用
  5. 网络营销中SEO是最常用的“圈粉”引流方式之一
  6. hp服务器安装exsi5.5
  7. java 1.7升级到1.8_CentOS openJdk1.7升级1.8
  8. SpringBoot整合spring-ws开发webservice接口(全流程详细教程)
  9. java:蓝桥杯练习 分解质因数
  10. 前端学习(3243):react的生命周期新
  11. 前端传递给后端且通过cookie方式,尽量传递id
  12. 算法题:括号匹配(小中大括号序列)
  13. 正本清源:LBS(基于位置服务)技术——高精准IP地址定位的8大误区(下)
  14. intouch historian 配置
  15. BA无标度网络(三):网络生成
  16. DVWA全级别详细通关教程
  17. 常见的五种前端页面布局(table布局、float布局、absolute布局、flex布局、grid布局)
  18. 推荐个不错的 Word 全文翻译和压缩工具!
  19. FusionCharts学习总结
  20. (每日一练python)有效的数独

热门文章

  1. 学习淘淘商城第四十八课(商品搜索功能Controller实现)
  2. CSS实现自动分页打印同时每页保留重复的自定义内容
  3. Win7内网外网一起使用解决方法
  4. ZFPlayer iOS16 系统横屏全屏问题处理
  5. 3a认证服务器型号,3A_tacacs认证
  6. Docker-01:Docker安装及更换源
  7. 四摄迅猛龙登场 realme Q新机998元起售
  8. 2024四川大学计算机考研信息汇总
  9. PixiJS学习(1)创建一个canvas
  10. Linux声音设备编程实例