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插入排序算法的实现代码
Nov 21 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Python批量发送post请求的实现代码
May 05 Python
python方法生成txt标签文件的实例代码
May 10 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
python绘制散点图并标记序号的方法
Dec 11 Python
Python面向对象程序设计示例小结
Jan 30 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
教你用Python matplotlib库制作简单的动画
Jun 11 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函数常用用法小结
2010/02/08 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
九年级科学教学反思
2014/01/29 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
python脚本框架webpy模板赋值实现
2021/11/20 Python