一、实现功能

判断在指定坐标范围内,是否存在相似度大于n的图片,并返回坐标。

二、基本思路

A=你需要寻找的图片

B=截取当前页面中指定范围的图片

利用opencv 判断A在B中的位置,

在该位置截取与A图同大小的图片C

对比图片C与图片A的相似度

三、实现的代码段

1、安装所需要的库

pip install opencv-python

pip install pywin32

2、截取指定坐标的图片

参数说明

filename:保存的文件名

hwnd:窗口句柄 请想办法获取

pos:坐标位置 [x1,y1,x2,y2]。x1,y1 是左上角坐标、x2,y2 指右下角坐标。

该功能可以返回不在最顶层程序的截图。

def window_capture(filename,hwnd=0,pos=None):

hwnd= hwnd #窗口的编号,0号表示当前活跃窗口

#根据窗口句柄获取窗口的设备上下文DC(Divice Context)

hwndDC =win32gui.GetWindowDC(hwnd)#根据窗口的DC获取mfcDC

mfcDC =win32ui.CreateDCFromHandle(hwndDC)#mfcDC创建可兼容的DC

saveDC =mfcDC.CreateCompatibleDC()#创建bigmap准备保存图片

saveBitMap =win32ui.CreateBitmap()#获取监控器信息

MoniterDev =win32api.EnumDisplayMonitors(None, None)if pos==None:

x1=0

y1=0

w= MoniterDev[0][2][2]

h= MoniterDev[0][2][3]else:

x1=pos[0]

y1=pos[1]

w=pos[2]-pos[0]

h=pos[3]-pos[1]#print w,h   #图片大小

#为bitmap开辟空间

saveBitMap.CreateCompatibleBitmap(mfcDC, MoniterDev[0][2][2], MoniterDev[0][2][3])#高度saveDC,将截图保存到saveBitmap中

saveDC.SelectObject(saveBitMap)#截取从左上角(0,0)长宽为(w,h)的图片

saveDC.BitBlt((x1, y1), (w, h), mfcDC, (x1, y1), win32con.SRCCOPY)

saveBitMap.SaveBitmapFile(saveDC, filename)

3、利用opencv 判断A在B中的位置

参数说明

target:cv2.imread(“图片B”)

template:cv2.imread(“图片A”)

deffind_picture(target,template):#获得模板图片的高宽尺寸

theight, twidth = template.shape[:2]#执行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED

result =cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)#归一化处理

cv2.normalize( result, result, 0, 1, cv2.NORM_MINMAX, -1)#寻找矩阵(一维数组当做向量,用Mat定义)中的最大值和最小值的匹配结果及其位置

min_val, max_val, min_loc, max_loc =cv2.minMaxLoc(result)#匹配值转换为字符串

#对于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法min_val越趋近与0匹配度越好,匹配位置取min_loc

#对于其他方法max_val越趋近于1匹配度越好,匹配位置取max_loc

strmin_val =str(min_val)#绘制矩形边框,将匹配区域标注出来

#min_loc:矩形定点

#(min_loc[0]+twidth,min_loc[1]+theight):矩形的宽高

#(0,0,225):矩形的边框颜色;2:矩形边框宽度

cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)#显示结果,并将匹配值显示在标题栏上

#cv2.imshow("MatchResult----MatchingValue="+strmin_val,target)

#cv2.waitKey()

#cv2.destroyAllWindows()

x=min_loc[0]

y=min_loc[1]return X,Y

4、返回指定图片的指定位置指定坐标

#target原始图片#x,y 起始坐标#w,h 返回的宽长

defget_pic_from_pic(x,y,w,h,target):

region= target[y:y+h,x:x+w]

retrun region

5、比较两个图片的相似度

defcompare_picture( imageA, imageB):#灰度图片比较

grayA =cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)

grayB=cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

(score, diff)= compare_ssim(grayA, grayB, full=True)return float(score)

python 按键精灵识图_Python实现按键精灵(二)-找图找色相关推荐

  1. python动态横道图_python的matplotlib.pyplot绘制甘特图

    博主本来就想简单地找一下代码,画一幅甘特图,结果百度之后发现甘特图的代码基本都不是用matplotlib库,但是像柱状图等统计图通常都是用这个库进行绘制的,所以博主就花了一些时间,自己敲了一份代码,简 ...

  2. matlab二维图填充,【Matlab】二维图绘制及填色总结(basic)

    编程渣的艰难探索之Matlab绘图 个人需求:用matlab绘制多条曲线并在指定不规则区域填色. 为什么一定要用Matlab呢?因为我觉得图形便于修改,看起来较为正规,代码量较少. 1 同时绘制多条曲 ...

  3. python做房源饼状图_python使用matplotlib画饼状图

    %matplotlib inlineimport matplotlib.pyplot as plt# 121 > 1行2列第1个fig1 = plt.subplot(121)plt.pie([1 ...

  4. python画k线图_Python使用matplotlib绘制k线图(去掉空白日期)

    原标题:Python使用matplotlib绘制k线图(去掉空白日期) 之前研究过使用 matplotlib.finance 中的 candlestick_ohlc() 方法绘制k线图,但是有个很无语 ...

  5. python panda 库箱线图_Python数据可视化:箱线图多种库画法

    概念 箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q ...

  6. python绘制时间序列图_python matplotlib 画dataframe的时间序列图实例

    python matplotlib 画dataframe的时间序列图实例 在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字 ...

  7. python画厢式图_Python数据可视化:箱线图多种库画法

    概念 箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q ...

  8. python的turtle画曲线_python的turtle模块画折线图

    importturtle yValues= [10.0,7.4,6.4,5.3,4.4,3.7,2.6]defmain(): t=turtle.Turtle() t.hideturtle() draw ...

  9. python画相关性可视化图_Python可视化matplotlibseborn16-相关性热图

    本文速览普通相关性heatmap聚类相关性heatmap 本文将了解到什么? 1.数据准备 2.seaborn.heatmap绘制correlation heatmap 默认参数绘制correlati ...

最新文章

  1. 011:视图函数介绍
  2. 数据库“新解”,看这里,get!
  3. 踩坑 :vue2 ajax异步请求数据,层数太多,页面无法渲染
  4. 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
  5. 回头看医疗行业信息化,怎一个乱字了得
  6. 多麦克风做拾音的波束_麦克风阵列是什么 有哪些关键技术?
  7. Mac上最好的Markdown文本编辑器_编辑工具
  8. java s结尾的工具类_FilenameUtils工具类
  9. XML DOM 节点类型(Node Types)
  10. 笨办法学 Python · 续 中文版
  11. webpack Babel
  12. 哈工大期末考试java_哈尔滨工业大学2019算法设计期末试题
  13. [置顶] 话说你最拼命的时候怎样拼命的?
  14. 假如时光倒流,我会这么学习Java
  15. 计算机后台处理程序,小编教你处理打印后台程序服务没有运行
  16. cx_Oracle连接数据库报DPI-1047: Cannot locate a 64-bit Oracle Client library
  17. NLP工具——NLTK 安装及使用
  18. 2、面向对象的思维(与结构化思维比较)
  19. SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符?
  20. 「SwiftUI」延迟执行代码

热门文章

  1. Carla学习2:carla安装与使用
  2. 卡特兰数列(Catalan )
  3. 人民网:“2021数字基建论坛”在京召开,共议行业高质量发展
  4. python数据表元素不为空值_python 填充空值失败_怎么用 Python 做数据分析实例
  5. 详细设计说明书的书写格式
  6. 广域网技术——SR-MPLS技术基础理论讲解
  7. GPL AND LGPL
  8. Redis数据类型的选择
  9. 11 Laws of The System Thinking in Software Develo(软件开发中的11个系统思维定律)
  10. 再见Excel!最强国产开源在线表格Luckysheet走红GitHub