如何使用opencv和pynput来完成一个自动识别图片坐标并点击的功能
时间: 2024-03-10 12:48:14 浏览: 95
要使用opencv和pynput来完成一个自动识别图片坐标并点击的功能,可以按照以下步骤:
1. 使用opencv读取需要识别的图片,并读取屏幕截图。
```
import cv2
import numpy as np
import pyscreenshot as ImageGrab
# 读取需要识别的图片
template = cv2.imread('image.png', 0)
# 读取屏幕截图
screenshot = np.array(ImageGrab.grab())
```
2. 使用opencv的模板匹配功能,在屏幕截图中查找需要识别的图片的位置。
```
# 进行模板匹配
res = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)
# 获取匹配位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
```
3. 计算需要点击的位置坐标,并使用pynput模拟鼠标点击。
```
# 计算需要点击的位置坐标
w, h = template.shape[::-1]
bottom_right = (top_left[0] + w, top_left[1] + h)
x, y = (top_left[0] + bottom_right[0]) // 2, (top_left[1] + bottom_right[1]) // 2
# 使用pynput模拟鼠标点击
from pynput.mouse import Button, Controller
mouse = Controller()
mouse.position = (x, y)
mouse.click(Button.left, 1)
```
完整代码如下:
```
import cv2
import numpy as np
import pyscreenshot as ImageGrab
from pynput.mouse import Button, Controller
# 读取需要识别的图片
template = cv2.imread('image.png', 0)
# 读取屏幕截图
screenshot = np.array(ImageGrab.grab())
# 进行模板匹配
res = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)
# 获取匹配位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
# 计算需要点击的位置坐标
w, h = template.shape[::-1]
bottom_right = (top_left[0] + w, top_left[1] + h)
x, y = (top_left[0] + bottom_right[0]) // 2, (top_left[1] + bottom_right[1]) // 2
# 使用pynput模拟鼠标点击
mouse = Controller()
mouse.position = (x, y)
mouse.click(Button.left, 1)
```
注意,由于屏幕截图和实际的鼠标位置可能存在偏差,因此需要根据实际情况微调匹配位置和点击位置的坐标。
阅读全文