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 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
Python装饰器decorator用法实例
Nov 10 Python
在Python中使用Mako模版库的简单教程
Apr 08 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
python tkinter canvas使用实例
Nov 04 Python
使用python绘制二维图形示例
Nov 22 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
Python如何实现邮件功能
May 27 Python
python 5个顶级异步框架推荐
Sep 09 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
Python3中最常用的5种线程锁实例总结
Jul 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
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
学习python类方法与对象方法
2016/03/15 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
用pycharm开发django项目示例代码
2018/10/24 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
法律进学校实施方案
2014/03/15 职场文书
员工工作表现评语
2014/04/26 职场文书
匿名信格式范文
2015/05/27 职场文书
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android