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编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
Feb 13 Python
python中adb有什么功能
Jun 07 Python
Python 忽略文件名编码的方法
Aug 01 Python
Python如何进行时间处理
Aug 06 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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
我的论坛源代码(三)
2006/10/09 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php简单中奖算法(实例)
2017/08/15 PHP
php实现微信支付之现金红包
2018/05/30 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
JS类的封装及实现代码
2009/12/02 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python3遍历目录树实现方法
2015/05/22 Python
基于python绘制科赫雪花
2018/06/22 Python
python操作toml文件的示例代码
2020/11/27 Python
什么是lambda函数
2013/09/17 面试题
物业电工岗位职责
2013/11/20 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
美术毕业生求职信
2014/02/25 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
浅谈Python类的单继承相关知识
2021/05/12 Python
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis