图片 6

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

python微信跳一跳系列之棋子定位颜色识别,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()

静态图片识别效果

图片 1 

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

动态实时识别

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

评价

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

预告

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

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

python微信跳一跳,前言
这是python玩跳一跳系列博文中一篇,主要内容是用颜色识别的…

python微信跳一跳,前言

这是python玩跳一跳系列博文中一篇,主要内容是用颜色识别的方法来进行跳跳小人的定位。

这是python玩跳一跳系列博文中一篇,主要内容是用颜色识别的方法来进行跳跳小人的定位。

通过观察,我们可以发现,尽管背景和棋子在不停的变化,但跳跳小人的形状和颜色基本保持不变,对于形状,我们在上一篇博文中已经采用模板匹配的方法来进行识别定位,效果非常好。这一篇博文就来对颜色识别进行验证。

颜色识别

分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Python开发的,如果你正在学习Python
,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴。

过观察,我们可以发现,尽管背景和棋子在不停的变化,但跳跳小人的形状和颜色基本保持不变,对于形状,我们在上一篇博文中已经采用模板匹配的方法来进行识别定位,效果非常好。这一篇博文就来对颜色识别进行验证。

用HSV颜色空间对输入的图片进行处理,用某种指定的颜色进行蒙版mask处理进而得到二值化的黑白图像,膨胀和腐蚀后去除噪点,对轮廓区域进行计算,画出圆心和质心位置,并实现动态的跟踪。

基本思路

其基本的步骤如下:

用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图像

静态图片识别效果

采用颜色的蒙版进行二值化处理得到黑白图像

图片 3 

降噪和轮廓处理

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

绘出圆心

动态实时识别

import cv2

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

import numpy a

评价

import time

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

lower_blue = np.array([115,75,75]) #设定跳跳小人棋子的阈值,蓝色为主

预告

upper_blue = np.array([130,255,125])

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

frame=cv2.imread(‘001.png’) #读入一张屏幕抓图

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

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #转到HSV空间

您可能感兴趣的文章:

  • python微信跳一跳系列之棋子定位像素遍历
  • python微信跳一跳系列之自动计算跳一跳距离
  • python微信跳一跳系列之色块轮廓定位棋盘
  • python实现微信发送邮件关闭电脑功能
  • python实现微信远程控制电脑
  • 使用Python制作微信跳一跳辅助
  • python基于itchat实现微信群消息同步机器人
  • 微信跳一跳游戏python脚本
  • Python3实现带附件的定时发送邮件功能
  • 教你使用python实现微信每天给女朋友说晚安

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

图片 5

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

左边是原始图片,中间是蒙版后的二值图,右边就是HSV图像,识别效果还是不错的。

可以看到,目前选定的颜色基本可以将小人的轮廓全部筛选出来,其最大的部分恰好就在底盘,圆心位置正是我们需要的。

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

图片 6

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

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