这篇文章将为大家详细讲解有关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图像,识别效果还是不错的。
可以看到,目前选定的颜色基本可以将小人的轮廓全部筛选出来,其最大的部分恰好就在底盘,圆心位置正是我们需要的。
动态实时识别
我们给出动态图,可以看一下动态实时识别的效果。
评价
采用颜色来对跳跳小人的底盘位置进行识别和定位效果不错,而且这种方法和手机的像素及屏幕大小无关,真正实现了各平台通用。
关于“python微信跳一跳系列之如何实现棋子定位颜色识别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。