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中time模块与datetime模块在使用中的不同之处
Nov 24 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
python八大排序算法速度实例对比
Dec 06 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
简单实现python数独游戏
Mar 30 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
python将txt文件读取为字典的示例
Dec 22 Python
学习和使用python的13个理由
Jul 30 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
python如何快速拼接字符串
Oct 28 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 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
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
Cookie 小记
2010/04/01 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
浅谈Python的异常处理
2016/06/19 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
2014最新党员违纪检讨书
2014/10/12 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
投资申请报告
2015/05/19 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书