如何用Python+OpenCV识别确认按钮坐标并实现自动点击?
基于Python+OpenCV识别并自动点击"CONFIRM"按钮
以下是优化后的代码,实现识别界面中"CONFIRM"按钮的坐标并自动点击的功能:
import time import cv2 from pytesseract import pytesseract import numpy as np import pyscreenshot as pysc import pyautogui as g # 设置Tesseract OCR路径 pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 截图区域的边界框(左、上、右、下),根据实际界面调整 SCREEN_BBOX = (671, 564, 1300, 951) while True: # 截取指定区域屏幕,直接转为numpy数组,无需保存到本地 screen = np.array(pysc.grab(bbox=SCREEN_BBOX)) # 转换为灰度图,提高OCR识别准确率 gray_screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY) # 使用image_to_data获取文字的详细位置信息 data = pytesseract.image_to_data(gray_screen, output_type=pytesseract.Output.DICT) confirm_found = False # 遍历识别到的所有文字 for i in range(len(data['text'])): text = data['text'][i].strip() if text == 'CONFIRM': # 获取文字的边界框坐标(相对于截图区域) x_min = data['left'][i] y_min = data['top'][i] x_max = x_min + data['width'][i] y_max = y_min + data['height'][i] # 计算按钮中心坐标,转换为全局屏幕坐标 center_x = SCREEN_BBOX[0] + (x_min + x_max) // 2 center_y = SCREEN_BBOX[1] + (y_min + y_max) // 2 print(f"找到CONFIRM按钮,坐标:({center_x}, {center_y})") # 自动点击按钮 g.click(center_x, center_y) confirm_found = True break # 找到后退出循环,避免重复点击 if not confirm_found: print("未检测到CONFIRM按钮") # 设置循环间隔,避免占用过高CPU资源 time.sleep(0.5)
关键改进说明:
- 跳过本地文件保存:直接使用截图的numpy数组进行处理,减少IO操作,提高效率
- 灰度图预处理:将截图转为灰度图,减少色彩干扰,提升OCR识别准确率
- 精准定位坐标:通过
image_to_data获取文字的边界框信息,计算按钮中心并转换为全局屏幕坐标(因为截图是局部区域,需要加上区域起始坐标的偏移量) - 自动点击逻辑:检测到按钮后立即调用
pyautogui.click()完成点击,同时添加循环间隔避免资源浪费
内容的提问来源于stack exchange,提问作者dhitx
相关产品推荐
相关产品推荐

