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中apply函数的用法实例教程
Jul 31 Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
python导入模块交叉引用的方法
Jan 19 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
pytorch forward两个参数实例
Jan 17 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
Python文字截图识别OCR工具实例解析
Mar 05 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
如何去掉文章里的 html 语法
2006/10/09 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
php的ajax简单实例
2014/02/27 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
Python编写电话薄实现增删改查功能
2016/05/07 Python
scrapy爬虫实例分享
2017/12/28 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
Python flask框架端口失效解决方案
2020/06/04 Python
Python通过format函数格式化显示值
2020/10/17 Python
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
2014年情人节活动方案
2014/02/16 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014年司法局工作总结
2014/12/11 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android