依赖python包|opencv、numpy、aircv

第一步:查找图片在原始图片上的坐标点

import aircv as ac

def matchImg(imgsrc,imgobj,confidencevalue=0.5):#imgsrc=原始图像,imgobj=待查找的图片

imsrc = ac.imread(imgsrc)

imobj = ac.imread(imgobj)

match_result = ac.find_template(imsrc,imobj,confidence) # {'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)}

if match_result is not None:

match_result['shape']=(imsrc.shape[1],imsrc.shape[0])#0为高,1为宽

return match_result

说明:通过aircv的find_template()方法,来返回匹配图片的坐标结果

1.入参:

find_template(原始图像imsrc,待查找的图片imobj,最低相似度confidence)

2.返回结果:

{'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)

confidence:匹配相似率

rectangle:匹配图片在原始图像上四边形的坐标

result:匹配图片在原始图片上的中心坐标点,也就是我们要找的点击点

注意:如果结果匹配到的confidence小于入参传递的相似度confidence,则会返回None,不返回字典

第二步:将图片匹配的坐标点,转换为手机屏幕上实际的坐标点

因为截图后在PC上的分辨率,和在手机上分辨率不一样,而我们通过第一步求出的坐标点是PC上截图的坐标点,一般比手机上大很多,所以需要转换一下坐标

photo_position=self.driver.get_screenshot_as_file(imgfile)#截屏手机

x = self.driver.get_window_size()['width']

y = self.driver.get_window_size()['height']

size_width,size_height = x,y #获得手机d的宽高尺寸

confidencevalue = 0.8 # 定义相似度

position = matchImg(imsrc,imobj,confidence)# 用第一步的方法,实际就是find_template()方法

if position != None:

x, y = position['result']

shape_x, shape_y = tuple(map(int,position['shape']))

position_x,position_y=int(photo_position_x+(photo_width/shape_x*x)),int(photo_position_y+(photo_height/shape_y*y))

self.driver.tap([(position_x, position_y)])

思路说明:

1.通过appium的方法driver.get_screenshot_as_file(filename)进行截图

2.通过appium的get_window_size获得宽高的字典,进而得到宽和高

3.在PC上通过截图和获取到的手机屏截图做匹配,返回匹配结果坐标以及PC上原图的尺寸

4.通过PC上截图和手机上屏幕的宽高比,以及在PC上的实际坐标点,获得手机上实际的坐标点

5.最后通过appium的方法对手机上的坐标进行点击drive.tap([x,y])

注意:为了匹配结果的精准性,截图最好在PC上原图1:1下截图,不要放大后截图,否则相似度会差很多

第三步:优化,截取手机上部分区域图片,进行相似度匹配,提高匹配精度

因为有些图片太小了,如果在一张大图上进行匹配,经常匹配不到。那如果知道图片出现的大概位置,可以截图那个区域再进行匹配

这里有两种区域截图方法:

1.根据appium定位到的元素进行截图

driver.find_element(*element).screenshot(imgfile)

2.根据截图矩形左上角坐标(百分比x,y)和宽高(百分比)截图

Image.open(imgfile).crop((pc_location_x,pc_location_y,pc_location_x+pc_width,pc_location_y+pc_height)).save(imgfile)

先截取整个手机屏幕,然后根据百分比以及PC上截图的宽高进行计算,通过PIL的crop()方法截图,获得截图上的坐标

然后根据PC和手机上图片的比例获得手机上的坐标

python坐标定位_如何利用Python识别并定位图片中某一个色块的坐标?相关推荐

  1. python新闻联播分类_如何利用人脸识别自动切分视频

    前些天被问到这样一个问题,能不能做视频分镜头,更确切的是自动切分视频片段.拿央视的新闻联播来说,30分钟的新闻联播,可能包含十多个新闻话题,希望能够自动把这10多个话题进行切分. 这个问题蛮有意思的, ...

  2. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  3. python数据论文_如何利用Python绘制学术论文图表

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷:1.当数据较多时,容易出现excel"翻白眼"的现象:2.需要使用 ...

  4. 利用python进行数据分析_资料 | 利用Python进行数据分析

    下载地址:https://www.yanxishe.com/resourceDetail/1443?from=leiphonecolumn_res0518 以下内容节选自豆瓣: 内容简介 · · · ...

  5. python求加速度_如何利用Python 为自然语言处理加速度

    自去年发布 Python 的指代消解包(coreference resolution package)之后,很多用户开始用它来构建许多应用程序,而这些应用与我们最初的对话应用完全不同. 利用 spaC ...

  6. 用python做头像_如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  7. python epub 精品_如何利用Python打包HTML页面为epub?

    最近沉迷于将各种博客和官方文档html转化成pdf,结果用手机看还是不太方便,所以想到将html转化成epub格式的电子书,要用os,re,requests,lxm,zipfile,五个库,在这里分享 ...

  8. python绘制太阳系_如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  9. python画四角星_如何利用Python|对多角星的绘制

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云,作者:编程与算法之美. 1 前言 在初步学习python的过 ...

最新文章

  1. 查看Linux 系统的配置和增减用户/增减组/增减权限
  2. vue中如何使用vi-for限制遍历的条数?只查询前三条、查询4-6条怎么实现?
  3. Android笔记 定义意图过滤器intent- filter demo
  4. Eclipse设置断点进行调试
  5. 杭州python爬虫招聘_python爬取招聘网站(智联,拉钩,Boss直聘)
  6. 局域网内两台9303 的管理vlan mac地址冲突解决方法
  7. JAVA设计模式有意思的国外站点
  8. 输入URL经历的过程
  9. mysql改变授权_mysql8使用grant授权修改
  10. Qt中文件读写进文本框出现乱码问题详解(gbk格式出现乱码为例)
  11. 在ArcGIS使用Modelbuilder创建拓扑检查模型
  12. 有关嵌入式的 github
  13. freeradius mysql web_使用daloRADIUS Web程序管理FreeRADIUS服务
  14. python按列写入csv文件_Python csv writer按列写入,n
  15. java gui 文本框_【Java GUI】文本框和文本区
  16. 产品经理不再纸上谈兵——关于用户默认头像的思考
  17. IDEAR 上传git出现的一系列错误
  18. series转换成dataframe
  19. 微信小程序使用iconfont字体图标
  20. 绩效考核指标KPI 听课笔记

热门文章

  1. Spire.Pdf 的各种操作总结
  2. 20140625 程序 进程 线程 物理存储器
  3. Android UI布局—— 仿QQ登录界面
  4. 【剑指offer】面试题45:把数组排成最小的数
  5. Leetcode--56. 合并区间
  6. 客户机服务器文件更新,服务端数据更新,如何更新客户端缓存
  7. 正则不能输入特殊字符_正则表达式语法学习和在线练习
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 21丨报告系统状态的连续日期【难度困难】​
  9. 4.MySQL基础操作
  10. 1110 Complete Binary Tree(甲级)