python 识别图片点击,设置坐标,离设置坐标越近的优先识别点击

news2024/10/7 10:18:34
import pyautogui
import cv2
import numpy as np
import math

def find_and_click(template_path, target_x, target_y, match_threshold=0.8):
    """
    在屏幕上查找目标图片并点击。

    Args:
        template_path: 目标图片的路径。
        target_x: 预设的坐标 x 轴值。
        target_y: 预设的坐标 y 轴值。
        match_threshold: 匹配阈值,默认值为 0.8。

    Returns:
        如果找到目标图片,则返回 True,否则返回 False。
    """

    # 加载目标图片
    template = cv2.imread(template_path, cv2.IMREAD_GRAYSCALE)

    # 获取屏幕截图
    screenshot = pyautogui.screenshot()
    screenshot = np.array(screenshot)
    screenshot = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)

    # 使用模板匹配查找目标图片
    result = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)

    # 获取匹配结果
    match_locations = np.where(result >= match_threshold)

    # 如果找到匹配结果
    if len(match_locations[0]) > 0:
        # 获取匹配结果的中心坐标
        match_x = match_locations[1][0]
        match_y = match_locations[0][0]

        # 计算匹配结果与预设坐标的距离
        distance = math.sqrt((match_x - target_x)**2 + (match_y - target_y)**2)

        # 如果有多个匹配结果,则选择距离最近的进行点击
        if len(match_locations[0]) > 1:
            for i in range(1, len(match_locations[0])):
                x = match_locations[1][i]
                y = match_locations[0][i]
                new_distance = math.sqrt((x - target_x)**2 + (y - target_y)**2)
                if new_distance < distance:
                    match_x = x
                    match_y = y
                    distance = new_distance

        # 点击目标图片
        pyautogui.click(match_x, match_y)
        return True

    # 如果没有找到匹配结果
    else:
        return False

# 示例代码
if __name__ == "__main__":
    # 目标图片路径
    template_path = "4.png"

    # 预设的坐标
    target_x = 100
    target_y = 100

    # 查找并点击目标图片
    if find_and_click(template_path, target_x, target_y):
        print("目标图片已点击!")
    else:
        print("未找到目标图片!")

优化代码,输出近似图片的位置坐标

import pyautogui
import cv2
import numpy as np
import math

def find_and_print_matches(template_path, target_x, target_y, match_threshold=0.8):
    """
    在屏幕上查找目标图片并打印所有匹配结果的位置。

    Args:
        template_path: 目标图片的路径。
        target_x: 预设的坐标 x 轴值。
        target_y: 预设的坐标 y 轴值。
        match_threshold: 匹配阈值,默认值为 0.8。
    """

    # 加载目标图片
    template = cv2.imread(template_path, cv2.IMREAD_GRAYSCALE)

    # 获取屏幕截图
    screenshot = pyautogui.screenshot()
    screenshot = np.array(screenshot)
    screenshot = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)

    # 使用模板匹配查找目标图片
    result = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)

    # 获取匹配结果
    match_locations = np.where(result >= match_threshold)

    # 如果找到匹配结果
    if len(match_locations[0]) > 0:
        # 打印所有匹配结果的位置
        print("找到以下匹配结果:")
        for i in range(len(match_locations[0])):
            match_x = match_locations[1][i]
            match_y = match_locations[0][i]
            distance = math.sqrt((match_x - target_x)**2 + (match_y - target_y)**2)
            print(f"位置:({match_x}, {match_y}),距离:{distance:.2f}")
    else:
        print("未找到匹配结果!")

# 示例代码
if __name__ == "__main__":
    # 目标图片路径
    template_path = "4.png"

    # 预设的坐标
    target_x = 100
    target_y = 200

    # 查找并打印匹配结果
    find_and_print_matches(template_path, target_x, target_y)

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

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

相关文章

Jenkins教程-10-发送飞书测试报告通知

上一小节我们学习了发送企业微信测试报告通知的方法&#xff0c;本小节我们讲解一下发送飞书测试报告通知的方法。 1、自动化用例执行完后&#xff0c;使用pytest_terminal_summary钩子函数收集测试结果&#xff0c;存入本地status.txt文件中&#xff0c;供Jenkins调用 conft…

计算机视觉-期末复习-简答/名词解释/综合设计

目录 第一讲--计算机/机器视觉概述 名词解释 简答 第二讲--图像处理概述 名词解释 简答 第三讲没划重点习题 第四讲--特征提取与选择 名词解释 简答 综合题 第五讲--不变特征 名词解释 简答 第六讲--物体分类与检测 简答 综合题 第七讲--视觉注意机制 简答 …

大数据------JavaWeb------MyBatis(完整知识点汇总)

MyBatis MyBatis简介 定义 它是一款优秀的持久层框架&#xff0c;用于简化JDBC开发它原来是Apache的一个开源项目iBatis&#xff0c;后来改名为MyBatis中文官网&#xff1a;https://mybatis.org/mybatis-3/zh_CN/index.html JaveEE三层架构 表现层&#xff08;做页面展示&…

零知识证明基础:对称加密与非对称加密

1、绪论 在密码学体系中&#xff0c;对称加密、非对称加密、单向散列函数、消息认证码、数字签名和伪随机数生成器被统称为密码学家的工具箱。其中&#xff0c;对称加密和非对称加密主要是用来保证机密性&#xff1b;单向散列函数用来保证消息的完整性&#xff1b;消息认证码的…

ODYSSEE加速电机仿真优化

由于对低碳社会的强烈需求&#xff0c;电动汽车(EV)和混合动力汽车(HEV)的数量正在迅速增长。新能源汽车的主要部件是电池、逆变器和电机。电机市场的规模也将不断扩大。为了提高EV的性能&#xff0c;对电机设计工程师的要求越来越高。 除了EV市场&#xff0c;协作机器人市场也…

VMware 最新的安全漏洞公告VMSA-2024-0013

#深度好文计划# 一、摘要 2024年6月26日&#xff0c;VMware 发布了最新的安全漏洞公告 VMSA-2024-0013&#xff0c;修复了 VMware ESXi 和 VMware vCenter 中的多个安全漏洞。 VMSA-2024-0013&#xff1a;VMware ESXi 和 vCenter Server 更新修正了多个安全性漏洞 &#xff…

华为HCIP Datacom H12-821 卷16

1.判断题 在 VRRP 中,当设备状态变为 Master 后,,会立刻发送免费 ARP 来刷新下游设备的 MAC 表项,从而把用户的流量引到此台设备上来 A、对 B、错 正确答案: A 解析: 2.判断题 路由选择工具 route- policy 能够基于预先定义的条件来进行过滤并设置 BGP

5.9k!一款清新好用的后台管理系统!【送源码】

今天给大家分享的开源项目是一个优雅清新后台管理系统——Soybean Admin。 简介 官方是这样介绍这个项目的&#xff1a; Soybean Admin 使用的是Vue3作为前端框架&#xff0c;TypeScript作为开发语言&#xff0c;同时还整合了NaiveUI组件库&#xff0c;使得系统具有高可用性和…

原创作品—医疗行业软件界面UI、交互设计

在医疗行业大屏UI设计中&#xff0c;首要的是以用户为中心&#xff0c;深入理解医生、护士、管理层等用户群体的具体需求和工作流程。大屏设计应直观展示关键医疗数据、患者信息、设备状态等&#xff0c;确保用户能够迅速、准确地获取所需信息。同时&#xff0c;功能布局应合理…

用户中心项目全流程

企业做项目流程 需求分析 > 设计&#xff08;概要设计 、 详细设计&#xff09; > 技术选型 >初始化项目 / 引入需要的技术 > 写个小demo > 写代码 &#xff08;实现业务逻辑&#xff09; > 测试&#xff08;单元测试&#xff09;> 代码提交 / 代码评审 …

idea http client GET 请求 报503错误

idea 提供的 http client 插件&#xff0c;在 GET 请求时总是 报503 的错误&#xff0c;但请求URL可以在浏览器中正常访问。 GET localhost:8080/student Response file saved. > 2024-06-20T160906.503.html 有一种原因跟本地配置的代理有关&#xff0c;如下图。如果在…

unidbg介绍

1.unicorn介绍 好比是一个CPU&#xff0c;可以模拟执行各种指令 提供了很多编程语言接口&#xff0c;可以操作内存、寄存器等 但它不是一个系统&#xff0c;内存管理、文件管理、系统调用等都需要自己来实现 2.基于unicorn开发的框架 cemu用来学习汇编的工具 AndroidNativeEm…

AcWing算法基础课笔记——最短Hamilton路径

最短Hamilton路径 题目 给定一张 n 个点的带权无向图&#xff0c;点从 0~n-1 标号&#xff0c;求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。 输入格式 第一行输入整数n。 接下来 n 行每行n个整数&#xff0c…

SpringCloud分布式微服务链路追踪方案:Skywalking

一、引言 随着微服务架构的广泛应用&#xff0c;系统的复杂性也随之增加。在这种复杂的系统中&#xff0c;应用通常由多个相互独立的服务组成&#xff0c;每个服务可能分布在不同的主机上。微服务架构虽然提高了系统的灵活性和可扩展性&#xff0c;但也带来了新的挑战&#xf…

第六篇:精通Docker Compose:打造高效的多容器应用环境

精通Docker Compose&#xff1a;打造高效的多容器应用环境 1. 引言 1.1 目的与重要性 在现代软件开发中&#xff0c;随着应用程序的复杂性不断增加&#xff0c;传统的单一容器部署方式已无法满足需求。Docker Compose作为一种强大的工具&#xff0c;专门用于定义和运行多容器…

【Spring】Spring学习笔记

Spring数据库 Spring JDBC 环境准备 创建Spring项目, 添加以下依赖 H2 Database: 用于充当嵌入式测试数据库JDBC API: 用于连接数据库Lombok: 用于简化pojo的编写 然后添加配置文件: spring.output.ansi.enabledALWAYS spring.datasource.username*********** spring.dataso…

Java-方法引用

方法引用概念 把已经有的方法拿过来用&#xff0c;当做函数式接口中抽象方法的方法体 前提条件 1、引用处必须是函数式接口 2、被引用的方法必须已经存在 3、被引用方法的形参和返回值 需要跟抽象方法保持一致 4、被引用方法的功能要满足当前需求 方法引用格式示例 方…

Micro-ROS是什么?

Micro-ROS是ROS&#xff08;Robot Operating System&#xff0c;机器人操作系统&#xff09;生态系统的一个重要组成部分&#xff0c;专为微控制器&#xff08;Microcontrollers&#xff09;设计的轻量级ROS版本。它的目标是在资源有限的嵌入式平台上实现ROS 2的功能&#xff0…

如何跑起来一个前后端项目

后端部署 第一步配置自己的maven 第二步优先导入自己本地jar包当本地没有在从远程下载 第三步找到配置文件 第四步成功运行后端部署完毕 前端部署 第一步看看项目node_modules有没有文件如果有就是已经安装好了对应的依赖&#xff0c;没有执行npm install 第二步运行即可

UE5 中的碰撞问题

文章目录 一、初始准备二、重叠和碰撞三、自定义碰撞 一、初始准备 首先我们创建一个 BP_ThirdPerson 项目&#xff0c;然后在项目中创建两个 Actor 的蓝图 Blueprint 首先是一个移动的 BP_Push&#xff0c;这里使用 time line 循环旋转 cube 的相对位置 得到效果如下 然后是…