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中处理XML的教程
Apr 29 Python
python实现将html表格转换成CSV文件的方法
Jun 28 Python
python如何修改装饰器中参数
Mar 20 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
Python模块的加载讲解
Jan 15 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
tensorflow之并行读入数据详解
Feb 05 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
Python实现ATM系统
Feb 17 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
JQuery优缺点分析说明
2010/06/09 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
JS实现多物体运动的方法详解
2018/01/23 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
python抓取京东小米8手机配置信息
2018/11/13 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
python基于opencv检测程序运行效率
2019/12/28 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
优秀女职工事迹材料
2014/02/06 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
卖车协议书
2014/04/21 职场文书
2015年话务员工作总结
2015/04/29 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
python中if和elif的区别介绍
2021/11/07 Python
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技