python微信跳一跳系列之棋子定位颜色识别


Posted in Python onFebruary 26, 2018

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()

静态图片识别效果

python微信跳一跳系列之棋子定位颜色识别

左边是原始图片,中间是蒙版后的二值图,右边就是HSV图像,识别效果还是不错的。
可以看到,目前选定的颜色基本可以将小人的轮廓全部筛选出来,其最大的部分恰好就在底盘,圆心位置正是我们需要的。

动态实时识别

我们给出动态图,可以看一下动态实时识别的效果。

python微信跳一跳系列之棋子定位颜色识别

评价

采用颜色来对跳跳小人的底盘位置进行识别和定位效果不错,而且这种方法和手机的像素及屏幕大小无关,真正实现了各平台通用。

预告

在下一篇博文中,我会对github上wechat-jump所采用的颜色遍历方法进行验证,敬请期待。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基于multiprocessing的多进程创建方法
Jun 04 Python
浅谈python jieba分词模块的基本用法
Nov 09 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
对python while循环和双重循环的实例详解
Aug 23 Python
python查看数据类型的方法
Oct 12 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
python hmac模块验证客户端的合法性
Nov 07 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 #Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 #Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 #Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 #Python
tensorflow入门之训练简单的神经网络方法
Feb 26 #Python
基于Python实现的微信好友数据分析
Feb 26 #Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 #Python
You might like
php中目录,文件操作详谈
2007/03/19 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
php session 写入数据库
2016/02/13 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
jQuery获取动态生成的元素示例
2014/06/15 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
JavaScript实现短信倒计时60s
2017/10/09 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python单例模式实例分析
2015/01/14 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
详解numpy的argmax的具体使用
2019/05/27 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
详解python中eval函数的作用
2019/10/22 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
2014年党支部学习材料
2014/05/19 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers