python 按键精灵识图_Python实现按键精灵(二)-找图找色
一、实现功能
判断在指定坐标范围内,是否存在相似度大于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实现按键精灵(二)-找图找色相关推荐
- python动态横道图_python的matplotlib.pyplot绘制甘特图
博主本来就想简单地找一下代码,画一幅甘特图,结果百度之后发现甘特图的代码基本都不是用matplotlib库,但是像柱状图等统计图通常都是用这个库进行绘制的,所以博主就花了一些时间,自己敲了一份代码,简 ...
- matlab二维图填充,【Matlab】二维图绘制及填色总结(basic)
编程渣的艰难探索之Matlab绘图 个人需求:用matlab绘制多条曲线并在指定不规则区域填色. 为什么一定要用Matlab呢?因为我觉得图形便于修改,看起来较为正规,代码量较少. 1 同时绘制多条曲 ...
- python做房源饼状图_python使用matplotlib画饼状图
%matplotlib inlineimport matplotlib.pyplot as plt# 121 > 1行2列第1个fig1 = plt.subplot(121)plt.pie([1 ...
- python画k线图_Python使用matplotlib绘制k线图(去掉空白日期)
原标题:Python使用matplotlib绘制k线图(去掉空白日期) 之前研究过使用 matplotlib.finance 中的 candlestick_ohlc() 方法绘制k线图,但是有个很无语 ...
- python panda 库箱线图_Python数据可视化:箱线图多种库画法
概念 箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q ...
- python绘制时间序列图_python matplotlib 画dataframe的时间序列图实例
python matplotlib 画dataframe的时间序列图实例 在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字 ...
- python画厢式图_Python数据可视化:箱线图多种库画法
概念 箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q ...
- 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 ...
- python画相关性可视化图_Python可视化matplotlibseborn16-相关性热图
本文速览普通相关性heatmap聚类相关性heatmap 本文将了解到什么? 1.数据准备 2.seaborn.heatmap绘制correlation heatmap 默认参数绘制correlati ...
最新文章
- 011:视图函数介绍
- 数据库“新解”,看这里,get!
- 踩坑 :vue2 ajax异步请求数据,层数太多,页面无法渲染
- 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
- 回头看医疗行业信息化,怎一个乱字了得
- 多麦克风做拾音的波束_麦克风阵列是什么 有哪些关键技术?
- Mac上最好的Markdown文本编辑器_编辑工具
- java s结尾的工具类_FilenameUtils工具类
- XML DOM 节点类型(Node Types)
- 笨办法学 Python · 续 中文版
- webpack Babel
- 哈工大期末考试java_哈尔滨工业大学2019算法设计期末试题
- [置顶] 话说你最拼命的时候怎样拼命的?
- 假如时光倒流,我会这么学习Java
- 计算机后台处理程序,小编教你处理打印后台程序服务没有运行
- cx_Oracle连接数据库报DPI-1047: Cannot locate a 64-bit Oracle Client library
- NLP工具——NLTK 安装及使用
- 2、面向对象的思维(与结构化思维比较)
- SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符?
- 「SwiftUI」延迟执行代码
热门文章
- Carla学习2:carla安装与使用
- 卡特兰数列(Catalan )
- 人民网:“2021数字基建论坛”在京召开,共议行业高质量发展
- python数据表元素不为空值_python 填充空值失败_怎么用 Python 做数据分析实例
- 详细设计说明书的书写格式
- 广域网技术——SR-MPLS技术基础理论讲解
- GPL AND LGPL
- Redis数据类型的选择
- 11 Laws of The System Thinking in Software Develo(软件开发中的11个系统思维定律)
- 再见Excel!最强国产开源在线表格Luckysheet走红GitHub