一、实现功能

判断在指定坐标范围内,是否存在相似度大于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实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...

  2. python 按键精灵识图_Python实现按键精灵(二)-找图找色

    一.实现功能 判断在指定坐标范围内,是否存在相似度大于n的图片,并返回坐标. 二.基本思路 A=你需要寻找的图片 B=截取当前页面中指定范围的图片 利用opencv 判断A在B中的位置, 在该位置截取 ...

  3. python2定点找色_Python实现按键精灵(二)-找图找色

    一.实现功能 判断在指定坐标范围内,是否存在相似度大于n的图片,并返回坐标. 二.基本思路 A=你需要寻找的图片 B=截取当前页面中指定范围的图片 利用opencv 判断A在B中的位置, 在该位置截取 ...

  4. python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...

  5. python图色模拟脚本_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色搜索功能思路: 抓取当前屏幕快 ...

  6. python模拟网页点击_python怎么模拟点击网页按钮

    python怎么模拟点击网页按钮 前提环境: Python3 和 Visual Studio Code安装完毕 . 安装selenium : 在终端输入: pip install selenium, ...

  7. python模拟网页点击_python模拟点击

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python怎么模拟点击网页按钮前提环境:python3 和 visual st ...

  8. python做按键精灵脚本_Python 实现按键精灵的功能,超简单详细(MAC版)

    前言: 想看Windows版的同窗能够看Python 实现按键精灵的功能,超简单详细(Windows版) 以前写了Windows版的python实现按键精灵功能.如今我鸟枪换炮换了个新的mac.发现以 ...

  9. android 多个按键精灵,给大家分享一个,按键精灵安卓版,找多图, 以及找多图返回多个坐标的,相信大家绝对用得到 _ 按键精灵手机版 - 按键精灵论坛...

    大家感觉有用的回复多多支持一下,下面这个找图代码,是我平时写代码,都用到的,我感觉不错,毕竟用起来有大漠的感觉,哈哈 //TracePrint "--" Dim 找图组合,图片数组 ...

  10. python模拟屏幕点击_python模拟鼠标点击教程

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  pywin32 pip install  pyHook?1.5.1?cp37?cp37 ...

最新文章

  1. 阿里云 centos oracle安装
  2. hdu1251 hash或者字典树
  3. oracle中order by 2,关于oracle中ROWNUM和ORDER BY的问题(2)
  4. java违反唯一约束异常_Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (DSPACE.SYS_C007868)...
  5. 基于java的土地档案管理系统设计(含源文件)
  6. 【C++基础学习】引起类模板被实例化情形总结
  7. Hibernate关联关系映射之一对一关联关系
  8. macos下安装redis客户端
  9. css中如何实现导航栏横向,css横向导航栏
  10. dpdk大页内存实现
  11. 微信小程序报错:invalid credential, access_token is invalid or not latest
  12. day53_电力系统_ztree动态生成权限控制
  13. ubnt+ros 接入无线
  14. AS3中将TUIO协议转换到传统触摸事件
  15. 小米手机连接电脑只能看到部分相片_小米手机连接电脑后怎么看照片?
  16. matlab三元一次方程组的解包含未知数,用matlab解三元一次方程组_matlab解高阶方程_matlab二分法求方程的近似解...
  17. redis如何查看主从状态信息master和salve
  18. 随便拍几张照片赚了3K,近期的风口视频项目
  19. 第一次毕业设计任务书
  20. gboard包名_如何在Android的Gboard键盘中搜索表情符号和GIF

热门文章

  1. linux下libreoffice增加字体,Linux下Libreoffice增加字体
  2. 海思3559开发环境搭建:从这里开始
  3. 换个角度理解Android的AIDL原理
  4. 不使用imrotate 的图像旋转实现
  5. 详述白盒测试的逻辑覆盖法的条件组合覆盖及其优缺点
  6. 小游戏---java版2048(2048 go go go)
  7. 研究生应如何合理管理时间
  8. 经典FAT文件系统格式详解
  9. ITF Demo代码(用VBScript构建的接口测试框架)
  10. php论坛源代码,php论坛源代码下载