python微信跳一跳系列之棋子定位颜色识别
作者:艾克思工作室 发布时间:2023-01-16 04:52:49
标签: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所采用的颜色遍历方法进行验证,敬请期待。
来源:http://blog.csdn.net/m0_37606112/article/details/79036085


猜你喜欢
- 前言远程执行命令有什么用?为什么要远程执行命令? 如果你只有2,3台服务器需要管理的时候,远程执行命令确实没有没多大作用,你可以登录到每台服
- 本文实例讲述了js对象基础用法。分享给大家供大家参考。具体分析如下:js对象在本质上与数组相同,都是存放一组数据。但创建方法有所不同,对象需
- 先说明2点开启缓存也会带来开销,主要表现在一下方面读取在查询开始之前必须要检查缓存如果查询是缓存的,但是不在结果集中,那么产生结果后保存数据
- 一、实战场景Flask 框架实现用户的注册,登录和登出。二、主要知识点flask_login 插件使用SQLAlchemy 基础操作用户基础
- 本文实例讲述了Python基础之函数基本用法与进阶。分享给大家供大家参考,具体如下:目标函数参数和返回值的作用函数的返回值 进阶函数的参数
- 前言删除列表中的元素十分简单,有很多方法。使用最多的是remove方法,remove() 方法从集合中删除指定的元素。此方法与discard
- 删除列表中元素的方法有三种:1. del命令使用del命令能够删除列表中指定位置上的元素,也可以删除整个列表。2. pop( )方法使用列表
- 随机漫步生成是无规则的,是系统自行选择的结果。根据设定的规则自定生成,上下左右的方位,每次所经过的方向路径。首先,创建一个RandomWal
- 本文实例讲述了Python实现将绝对URL替换成相对URL的方法。分享给大家供大家参考。具体分析如下:一、问题:公司一个项目需要上传图片,一
- Mac版Python3安装/升级Mac系统自带Python,但都是2.X版本,非常老的版本了。如果我们需要安装Python3版本,怎么能快速
- 介绍最近在项目中遇到插入数据瓶颈,几万、几十万、几百万的数据保存到MYSQL数据库,使用EF插入数据速度非常慢,数据量非常大时EF插入需要几
- 1.图像直方图基本含义和绘制首先我们先要了解一下python三大剑客之一——matplotlib我们
- html<!--图片轮播 Start--><div class="pics-ul">
- 前言前面介绍了Allure报告,本篇来学习普通的HTML如何展示在Jenkins上安装插件Manage Jenkins --> Man
- 事件调度sched 模块内容很简单,只定义了一个类。它用来最为一个通用的事件调度模块。class sched.scheduler(timef
- 本文实例讲述了JS获得选取checkbox整行数据的方法。分享给大家供大家参考。具体实现方法如下:<html><head&
- 遇到这样一个情况想将变量v转化为[]string类型var v interface{}a := []interface{}{"1&
- Python单元测试unittest中提供了一下四种装饰器实现测试跳过和预期故障。(使用Python 2.7.13)请查考Python手册中
- pytorch_pretrained_bert将tensorflow模型转化为pytorch模型BERT仓库里的模型是TensorFlow版
- 内容简介随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pt