You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OpenCV实现掩模白色区域识别及鼠标自动点击的方案咨询

实现方案

你可以通过OpenCV的轮廓查找功能定位白色连通区域,搭配PyAutoGUI实现鼠标点击,具体实现如下:

前置依赖安装

pip install pyautogui

修改后完整代码

import time
import cv2
import numpy as np
import mss
import pyautogui

# 点击冷却时间,避免重复点击
CLICK_COOLDOWN = 1
last_click_time = 0

with mss.mss() as sct:
    monitor = {"top": 1, "left": 1, "width": 250, "height": 250} 
    lower=np.array([2,97,154])
    upper=np.array([4,210,225 ])   #  hero

    # 形态学操作内核,用于降噪
    kernel = np.ones((3,3), np.uint8)

    while "Screen capturing":
        img = np.array(sct.grab(monitor))
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        mask = cv2.inRange(hsv, lower, upper)

        # 第一步:mask降噪,去除小噪点
        mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=2)

        # 第二步:查找所有白色连通区域轮廓
        contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        if contours:
            # 第三步:过滤面积过小的轮廓,可根据实际场景调整阈值
            valid_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > 50]
            if valid_contours:
                # 取面积最大的目标区域
                target_cnt = max(valid_contours, key=cv2.contourArea)
                # 计算区域中心坐标
                M = cv2.moments(target_cnt)
                if M["m00"] != 0:
                    cx = int(M["m10"] / M["m00"])
                    cy = int(M["m01"] / M["m00"])
                    # 转换为屏幕绝对坐标
                    screen_x = cx + monitor["left"]
                    screen_y = cy + monitor["top"]

                    # 冷却时间到后触发点击
                    current_time = time.time()
                    if current_time - last_click_time > CLICK_COOLDOWN:
                        pyautogui.click(screen_x, screen_y)
                        last_click_time = current_time
                        print(f"触发点击,坐标:({screen_x}, {screen_y})")

        cv2.imshow("Maskelenmis", mask)
        
        # 按q键退出
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break

关键参数调整说明

  • 面积阈值:代码里cv2.contourArea(cnt) > 50的数值50可以根据目标区域实际大小调整,避免小噪点触发误点击
  • 冷却时间:CLICK_COOLDOWN可根据需求调整点击间隔,单位为秒
  • 形态学内核大小:如果噪点较多可以把np.ones((3,3))改成np.ones((5,5))增强降噪效果

内容的提问来源于stack exchange,提问作者Beat By Venom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:27:04