python微信跳一跳系列之棋子定位颜色识别
作者:艾克思工作室 时间:2023-01-16 04:52:49
python微信跳一跳,前言
这是python玩跳一跳系列博文中一篇,主要内容是用颜色识别的方法来进行跳跳小人的定位。
颜色识别
通过观察,我们可以发现,尽管背景和棋子在不停的变化,但跳跳小人的形状和颜色基本保持不变,对于形状,我们在上一篇博文中已经采用模板匹配的方法来进行识别定位,效果非常好。这一篇博文就来对颜色识别进行验证。
基本思路
用HSV颜色空间对输入的图片进行处理,用某种指定的颜色进行蒙版mask处理进而得到二值化的黑白图像,膨胀和腐蚀后去除噪点,对轮廓区域进行计算,画出圆心和质心位置,并实现动态的跟踪。
其基本的步骤如下:
设定需要的颜色阈值
读入图像
转化为HSV图像
采用颜色的蒙版进行二值化处理得到黑白图像
降噪和轮廓处理
绘出圆心
python3.6代码
import cv2
import numpy as np
import time
lower_blue = np.array([115,75,75]) #设定蓝色的阈值
upper_blue = np.array([130,255,125])
frame=cv2.imread('001.png')
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #转到HSV空间
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
cnts = cv2.findContours(mask_blue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
if len(cnts) > 0:
c = max(cnts, key = cv2.contourArea) #找到面积最大的轮廓
((x, y), radius) = cv2.minEnclosingCircle(c) #确定面积最大的轮廓的外接圆
center= (int(x),int(y))
cv2.circle(frame, center, int(radius+10), (0, 0, 255), 3) #画出圆心
cv2.circle(frame, center, 3, (0, 0, 255), -1)
cv2.circle(hsv, center, int(radius+10), (255, 255, 255), 3) #画出圆心
cv2.circle(hsv, center, 3, (0, 0, 255), -1)
cv2.circle(mask_blue, center, int(radius+10), (255, 255, 255), 3) #画出圆心
cv2.circle(mask_blue, center, 3, (0, 0, 255), -1)
cv2.imshow('frame',frame)
cv2.imshow('hsv',hsv)
cv2.imshow('mask',mask_blue)
if cv2.waitKey(0)==ord('q'):
cv2.destroyAllWindows()
静态图片识别效果
左边是原始图片,中间是蒙版后的二值图,右边就是HSV图像,识别效果还是不错的。
可以看到,目前选定的颜色基本可以将小人的轮廓全部筛选出来,其最大的部分恰好就在底盘,圆心位置正是我们需要的。
动态实时识别
我们给出动态图,可以看一下动态实时识别的效果。
评价
采用颜色来对跳跳小人的底盘位置进行识别和定位效果不错,而且这种方法和手机的像素及屏幕大小无关,真正实现了各平台通用。
预告
在下一篇博文中,我会对github上wechat-jump所采用的颜色遍历方法进行验证,敬请期待。
来源:http://blog.csdn.net/m0_37606112/article/details/79036085
标签:python,微信,跳一跳
0
投稿
猜你喜欢
MySQL 函数过程递归
2008-07-25 19:32:00
Python实现SMTP发送邮件详细教程
2021-05-10 03:01:01
python去除所有html标签的方法
2021-02-23 20:49:00
Python实现简单飞机大战
2022-11-11 17:39:11
Python判断对象是否为文件对象(file object)的三种方法示例
2021-05-27 09:46:17
ASP页面内VBScript和JScript的交互
2007-09-11 13:49:00
Django显示可视化图表的实践
2023-04-13 02:42:38
sqlserver 支持定位当前页,自定义排序的分页SQL(拒绝动态SQL)
2024-01-16 03:58:06
php bugs代码审计基础详解
2023-06-02 13:49:52
python生成随机红包的实例写法
2021-02-20 12:30:33
python单线程文件传输的实例(C/S)
2023-04-07 22:45:48
Python 通过pip安装Django详细介绍
2022-09-01 20:25:55
sublime text 3配置使用python操作方法
2023-01-21 20:30:14
解决idea打开窗口/tab过多导致隐藏的问题
2022-12-29 10:45:42
巧用正则表达式获取新闻中图片地址
2010-07-17 13:09:00
Python实现识别手写数字大纲
2022-06-28 05:19:13
关于 Python opencv 使用中的 ValueError: too many values to unpack
2023-07-26 23:46:36
怎样使用 SQL Server 数据库嵌套子查询
2009-02-05 15:26:00
解决Pycharm出现的部分快捷键无效问题
2021-09-12 12:49:34
python利用socket实现客户端和服务端之间进行通信
2022-04-23 07:34:59