用 OpenCV 写个微信自动抢红包,聊聊"模板匹配"到底怎么工作

手慢无 😭

微信群里发红包,永远是那几个”秒抢王”包圆,反应慢半拍的我经常只看到一句”手慢了,红包派完了”。

与其怪自己手速,不如让电脑来抢——它的反应比人快得多。于是有了这个基于 OpenCV 图像识别的桌面版微信自动抢红包工具。顺便,这篇也想借它把**模板匹配(Template Matching)**这个常用的图像技术讲清楚。

仓库地址:github.com/QinYe233/WechatRedPackdgeAutoTool

它是怎么”看见”红包的

核心思路很朴素:持续盯着屏幕,一旦画面里出现红包的样子,就自动点开。

完整的动作循环是这样的:

1
2
发现红包图标 → 点击 → 找到"开"按钮 → 点击
→ 等待 0.5 秒 → 找到关闭按钮 → 点击 → 继续检测下一个

它以约 20ms 的间隔实时截屏检测(即每秒约 50 次),所以红包一出现基本就能被捕捉到。界面上有实时统计,能看到发现数量与成功率。

原理:模板匹配到底是什么 🔍

这是全篇的技术核心,其实原理并不复杂。

所谓模板匹配,就是先给程序一张”样板图”(比如红包那个标志性的图标),让它拿着样板,在整张屏幕截图上逐像素滑动比对,找出与样板最相似的位置。

工具用的是 OpenCV 的 TM_CCOEFF_NORMED 算法,它对每个位置给出一个 0.0 ~ 1.0 的相似度分数:1.0 表示完全一致,越低越不像。再设一个阈值——某位置的相似度超过阈值,就判定”这里有目标”,让鼠标点过去。

  • 找红包、找”开”按钮,阈值设 0.8 左右即可;
  • 关闭按钮这类关键操作,阈值会拉到接近 1.0(几乎完全一致才点)。这是一层防误触设计——屏幕上万一有个长得相近的元素,也不至于被误点到别的程序上。

除了高阈值,防误触还配合了”延迟再检测”的机制,尽量确保点到的确实是微信自己的按钮。

用起来要准备什么

因为识别依赖”样板图”,你需要先准备三张 PNG 模板截图(要在你自己的电脑上截,因为每个人的微信皮肤、屏幕分辨率都不同):

  1. 红包图标(约 50×50);
  2. “开”按钮(约 80×80);
  3. 关闭按钮(约 30×30)。

配套的命令行截图工具,帮你把这几张模板准备好

其余参数都可在配置里调整:相似度阈值、检测间隔,以及可选的搜索区域限制——把某个按钮的查找范围锁定在屏幕的某一块,既更快也更稳。项目还附带一个 select_region.py,可以用鼠标框选搜索区域,比手填坐标直观得多。

环境要求

  • 语言:Python 3.7+
  • 依赖:OpenCV、NumPy、PyAutoGUI
  • 平台:Windows 10 / 11(理论上 macOS / Linux 也能运行)

⚠️ 一句正经的提醒

这个工具的定位是技术练手 + 自娱自乐,拿来学习图像识别与桌面自动化很合适。但有几点请注意:

  • 用在亲友群里抢着玩没问题,但不要拿去薅商业活动、营销红包的羊毛;
  • 自动化操作可能违反微信的用户协议,账号风险自负,不要用在重要账号上;
  • 说到底,抢红包的乐趣本就在那一下手速,偶尔靠它赢一把可以,长期挂着反而没意思了。

写在最后

技术本身是中性的——同一套模板匹配,可以用来抢红包,也可以用来做游戏的自动化测试、屏幕监控、自动打卡。把原理搞懂了,能延伸的场景其实很多。

代码不长,很适合拿来入门 OpenCV,欢迎去仓库看看 🌿