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

依赖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和手机上图片的比例获得手机上的坐标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7打开图形界面命令_centos7标准版(DVD)命令界面和图形界面相互切换

1、root登陆终端2、输入命令 vi /etc/inittab ,查看两种界面的启动模式:vi /etc/inittab3、退出vi模式,,输入命令systemctl get-default 查看当前系统启动模式;我的是命令界面模式为:multi-user.target;4、…

为什么编程语言要从c语言学起,在那么多编程语言中,为什么推荐初学者学 C 语言?...

如果你学过了计蒜客的《编程初学入门常识》的课,你就会知道,一个汇编写的操作系统,是没有办法在不同的计算机上普适使用的。所以呢,Ken 和 Dennis 为了让更多人在非 PDP-7 小型机的计算机上也玩上《星际旅行》的游戏,决…

ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...

本文是“Java秒杀系统实战系列文章”的第十六篇,本文我们将继续秒杀系统的优化之路,采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发访问所出现的并发安全问题,即用ZooKeeper实现一种分布式锁&…

curl shell 失败_linux – curl命令不在bash中通过shell脚本执行

我正在学习shell脚本!同样我尝试在ubuntu终端上使用curl下载facebook页面.t.sh内容vivi-Dell-7537(Desktop) $cat t.shcurlCmd"curl \"https://www.facebook.com/vivekkumar27june88\""echo $curlCmd($curlCmd) > ~/Desktop/fb.html运行脚本…

centos配置c语言环境变量,CentOS7设置环境变量

一、环境变量的概念1、环境变量的含义程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。2、环境变量的分类1)按生效的范围分类。系统环境变量:公共的,对全部的用户都生效。用户环境变量:用户私…

python 3.7.732位安装步骤_Python3.7安装pyaudio教程解析

本人笔记本电脑安装的是 python3.7, 64位操作系统,基于x64的处理器 因为 pyaudio 暂时不支持 python3.7 和 3.8,所以若需要安装 pyaudio 需要下载 whl 文件后再离线进行安装。 首先:下载安装 pyaudio 的 whl 文件 然后按下 ctrlf 输入关键字&…

java语言程序设计是c语言吗,浅析C语言和Java语言的异同.pdf

新一代信息技 m0 l0、… … … …浅析C语言和Java语言的异同张亚荣(通辽职业学院信息技术系,内蒙古通辽 028000)【摘 要l文章根据本人多年对c语言和Java语言教学过程中遇到的一些实际问题,诸如Java语言是不是c语言发展和衍生的产物等。基于此&#xff0c…

python搜论文_python论文

浅谈我眼中的 python 吴凡 摘要: 作为一门非常有潜力的高级语言, python 正在编程上发挥着越来越大的作用。这学期,通 过对 python 基础知识的学习,对 python 有了一定的认识。同时和已经学习的高级语言 C 和 C 有了一定的对比&am…

图书管理系统c语言报告调试分析,图书管理系统C语言程序设计实验分析报告.doc...

图书管理系统C语言程序设计实验分析报告C语言程序设计实验报告系别专业班级姓名学号时间实验题目 图书信息管理系统一、实验目的(1)熟练掌握C语言的相关操作。(2)综合应用C语言的知识,独立完成一个完整的系统,提高编程能力,体会软件程序的开发…

python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件

Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取、写入、追加等操作,默认情况下"r"模式,文件不存在的话会发生OSError错误的。…

python deepcopy报错_python 字典对象赋值之deepcopy遭遇的问题及解决过程(lxml惹的祸)...

今天在写一段代码的时候,需要对字典进行传值操作。一般情况下字典a 字典b,意味着是传引用,b发送改变的情况下a也会发生改变。我的字典如下a{testcase: {attributes: {classname: testdemo, circles: 2, casecode: case02, description: u/u6…

c语言printf函数很长时间,C语言学习之printf()函数特别注意事项

https://m.toutiao.com/is/eLAopLB/做为C语言程序的输出函数printf()在使用时除了其正常的使用之外,还有特别要注意的地方:1、在函数里面,基本上只有三种字符,一种为格式字符,最常见的有%d(十进制整数),%f(浮点数形式)…

python的三种结构_Python控制结构,python

比较运算符 布尔类型 布尔值有两个:True和False 例1: a True a 例2: 2 3 提示: 1.不要把赋值(一个等号)与比较(两个等号)混淆。 2.Python是区分大小写的,所以True与tru…

机器人 知乎碧桂园_万亿负债之下,碧桂园启动人事调整

原标题:万亿负债之下,碧桂园启动人事调整疫情之下,各行各业如履薄冰。作为资金密集型和人员密集型行业,房地产业头顶本就悬着一把「房主不炒」的达摩克里斯之剑,现在又面临销售阻遏,受到的冲击尤其大&#…

python转换函数使用_Python Socket模块中的IP转换函数

Python Socket模块中包含一些有用IP转换函数,说明如下: socket.ntohl(x) // 类似于C语言的ntohl(x) 把32位正整数从网络序转换成主机字节序。 socket.ntohs(x) // 类似于C语言的ntohs(x) 把16位正整数从网络序转换成主机字节序。 socket.htonl(x) // 类似…

嵌入式 c语言 面试题,嵌入式面试题-持续更新

1.用预处理指令#define声明一个常数&#xff0c;用以表示1年中有多少秒(忽略闰年问题)。#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL //最后的UL代表无符号整数。2.写一个“标准”宏MIN&#xff0c;这个宏输入两个参数并返回较小的一个。#define MIN(x, y) ((x) < …

一部分 数据 迁移_从虚机到容器,知名架构师告诉你如何平滑进行业务迁移

【小宅按】近期&#xff0c;短视频产品“秒拍”完成了一个“大动作”——将原来部署在虚拟机上的主体业务迁移到华为云&#xff0c;同时将公司的技术体系承载在下一代虚拟技术容器&#xff08;Docker&#xff09;上。而这一系列动作是在业务不下线&#xff0c;用户无感知的前提…

cuda 实现sift gpu_为Keras提供GPU加速

在刚入坑机器学习时&#xff0c;书上所使用的算法&#xff08;回归、决策树等&#xff09;及实例较为简单&#xff0c;一般CPU&#xff08;中央处理器&#xff09;的计算能力均能胜任&#xff0c;从而快速实现。但若使用keras&#xff08;一种基于深度学习框架的高级应用接口&a…

caged系统pdf_建筑行业单词中英文对照教材.pdf

智能建筑系统 BUILDING AUTOMATION & CONTROL SYSTEMS监视和警报 13850-detection & alarm公用建筑设备 public building equipment登记设备 registration equipment固体废物处理设备 solid waste handling equipment给水和水处理设备 WATER SUPPLY & TREATMENT EQ…

枚举算法称硬币C语言,【算法系列之枚举】称硬币

题目有12枚硬币。其中有11枚真币和1枚假币。假币和真 币重量不同&#xff0c;但不知道假币比真币轻还是重。现在&#xff0c; 用一架天平称了这些币三次&#xff0c;告诉你称的结果&#xff0c;请你 找出假币并且确定假币是轻是重(数据保证一定能找 出来)。输入第一行是测试数据…