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学习笔记(二)基础语法
Jun 06 Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 Python
python静态方法实例
Jan 14 Python
python @property的用法及含义全面解析
Feb 01 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
Python 爬虫性能相关总结
Aug 03 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
python实现Nao机器人的单目测距
Sep 04 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
JavaScript创建对象的写法
2013/08/29 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
wxPython实现画图板
2020/08/27 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
python如何调用php文件中的函数详解
2020/12/29 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
送给程序员的20个Java集合面试问题
2014/08/06 面试题
市场营销专科应届生求职信
2013/11/24 职场文书
元旦联欢会感言
2014/03/04 职场文书
联欢晚会主持词
2014/03/25 职场文书
创业计划书之花店
2019/09/20 职场文书
深入理解pytorch库的dockerfile
2022/06/10 Python