您的位置:首页 > 健康 > 美食 > 深圳企业网站建设制作网络公司_嘉兴企业网站设计哪家好_南京百度推广优化_百度快照

深圳企业网站建设制作网络公司_嘉兴企业网站设计哪家好_南京百度推广优化_百度快照

2025/1/4 9:20:57 来源:https://blog.csdn.net/weixin_50652063/article/details/144314081  浏览:    关键词:深圳企业网站建设制作网络公司_嘉兴企业网站设计哪家好_南京百度推广优化_百度快照
深圳企业网站建设制作网络公司_嘉兴企业网站设计哪家好_南京百度推广优化_百度快照

桌面应用程序的UI自动化,除了解析应用层级控件外,还可以通过图片定位获取目标元素位置,对其进行点击、双击、滚动等操作。
python可用opencv库操作图片。

opencv安装

  • sudo apt install python-opencv

图片比对

import cv2
import pyautoguidef match_img(small_image, big_image=None, confidence_value=0.9):"""small_image: 目标图片的路径big_image: 需要匹配的图片,在大图中去匹配目标图片confidence_value: 匹配度,0-1"""# 屏幕截图screen = pyautogui.screenshot()screen.save('/tmp/screen.png')# 获取屏幕截图数组信息screen_array = cv2.imread('/tmp/screen.png')if big_image:# 获取大图的数组信息big_img_array = cv2.imread('/tmp/screen.png')# 先获取大图在屏幕中的位置res = cv2.matchTemplate(screen_array, big_img_array, cv2.TM_CCOEFF_NORMED)# 从一个矩阵中找出全局的最大值和最小值minmax = cv2.minMaxLoc(res)# 取匹配度最大的坐标,这个也代表了大图的顶点坐标pos_start_big = minmax[3]else:# 如果没有传入大图,则用屏幕截图当做大图big_img_array = screen_arraypos_start_big = [0, 0]# 获取目标图片的数组信息small_img_array = cv2.imread(small_image)# 调用matchTemplate方法进行匹配,cv.TM_CCOEFF_NORMED是匹配的方法:该方法使用归一化的平方差进行匹配,最佳匹配在结果为0处res = cv2.matchTemplate(big_img_array, small_img_array, cv2.TM_CCOEFF_NORMED)# 从一个矩阵中找出全局的最大值和最小值minmax = cv2.minMaxLoc(res)# 取匹配度最大的坐标,注意这是相对大图的顶点坐标pos_start = minmax[3]# 匹配对象的中心坐标x y,这里获取的是绝对坐标x = int(pos_start_big[0] + pos_start[0]) + int(small_img_array.shape[1] / 2)y = int(pos_start_big[1] + pos_start[1]) + int(small_img_array.shape[0] / 2)# 取最大的匹配度值similarity = minmax[1]# 如果匹配度不满足条件,直接返回空if similarity < confidence_value:return None# 否则返回目标图片的中心位置return x, y# 调用方法
res = match_img('./img.png', './img_1.png', confidence_value=0.9)
# 通过鼠标移动验证获取的图片位置正确
pyautogui.moveTo(res[0], res[1])

以上代码实现了一个图片匹配方法,返回匹配到的图片坐标。有2种使用方式:

  1. 直接传入目标图片,这样会在整个屏幕截图中查找目标图片;
  2. 在一张大图中匹配目标图片,返回的也是目标图片的绝对坐标位置;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com