python微信跳一跳系列之棋子定位颜色识别

 更新时间:2018年02月26日 13:57:09   作者:艾克思工作室  
这篇文章主要为大家详细介绍了python微信跳一跳系列之棋子定位之颜色识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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()

静态图片识别效果

左边是原始图片,中间是蒙版后的二值图,右边就是HSV图像,识别效果还是不错的。
可以看到,目前选定的颜色基本可以将小人的轮廓全部筛选出来,其最大的部分恰好就在底盘,圆心位置正是我们需要的。

动态实时识别

我们给出动态图,可以看一下动态实时识别的效果。

评价

采用颜色来对跳跳小人的底盘位置进行识别和定位效果不错,而且这种方法和手机的像素及屏幕大小无关,真正实现了各平台通用。

预告

在下一篇博文中,我会对github上wechat-jump所采用的颜色遍历方法进行验证,敬请期待。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python3.6连接Oracle数据库的方法详解

    Python3.6连接Oracle数据库的方法详解

    这篇文章主要介绍了Python3.6连接Oracle数据库的方法,较为详细的分析了cx_Oracle模块安装及Python3.6使用cx_Oracle模块操作Oracle数据库的具体操作步骤与相关注意事项,需要的朋友可以参考下
    2018-05-05
  • python怎么删除缓存文件

    python怎么删除缓存文件

    在本篇文章里小编给大家整理的是一篇关于python删除缓存文件方法,需要的朋友们可以学习下。
    2020-07-07
  • Python语言异常处理测试过程解析

    Python语言异常处理测试过程解析

    这篇文章主要介绍了Python语言异常处理测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python使用__new__()方法为对象分配内存及返回对象的引用示例

    Python使用__new__()方法为对象分配内存及返回对象的引用示例

    这篇文章主要介绍了Python使用__new__()方法为对象分配内存及返回对象的引用,结合实例形式分析了Python对象初始化及内存操作相关使用技巧,需要的朋友可以参考下
    2019-09-09
  • Python中常见占位符的用法解析

    Python中常见占位符的用法解析

    在Python编程中,经常需要在字符串中插入变量或占位符来构建动态的文本内容,这篇文章主要为大家介绍了一些常见占位符的使用,需要的可以了解下
    2024-01-01
  • python list等分并从等分的子集中随机选取一个数

    python list等分并从等分的子集中随机选取一个数

    这篇文章主要介绍了python list等分并从等分的子集中随机选取一个数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python开发之QT解决无边框界面拖动卡屏问题(附带源码)

    Python开发之QT解决无边框界面拖动卡屏问题(附带源码)

    朋友在学习QT的过程中,都会遇到各种问题,今天就QT无边框拖动花屏问题给大家详细介绍,究竟该如何解决呢,下面通过实例代码和图文相结合给大家详细介绍,需要的朋友参考下吧
    2021-05-05
  • 一文带你掌握Python自然语言处理库SpaCy

    一文带你掌握Python自然语言处理库SpaCy

    SpaCy是一个非常强大的Python自然语言处理库,它包含了众多强大功能,如词性标注、命名实体识别、依赖关系解析等等,这篇文章的目标是帮助你了解SpaCy的基本功能和如何使用,需要的朋友可以参考下
    2023-07-07
  • Python 递归函数详解及实例

    Python 递归函数详解及实例

    这篇文章主要介绍了Python 递归函数详解及实例的相关资料,需要的朋友可以参考下
    2016-12-12
  • Tensorflow 同时载入多个模型的实例讲解

    Tensorflow 同时载入多个模型的实例讲解

    今天小编就为大家分享一篇Tensorflow 同时载入多个模型的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论