【机器学习实战】制作五子棋AI之一:图片预处理(尺寸变换和增加alpha通道)
来源:互联网 发布:php 敏感词过滤 编辑:程序博客网 时间:2024/04/30 05:27
当学习了一定的机器学习的算法和编程技巧之后,就应该做一些小的项目来帮助自己巩固和进一步掌握学到的知识,在这个项目里将通过一些不同的机器学学习算法来实现一个五子棋AI。
除了机器学习的某些知识以外,还需要掌握一些python的基础知识和pygame模块的使用方法,分别推荐一个学习资源:
- 廖雪峰老师的Python教程
- 目光博客Pygame
当然也可以跟着本教程一起学习。
好了,废话就这么多,下面进入正题,开始设计我们的五子棋AI
要设计一个五子棋AI,必须要有UI界面,有了UI界面才能完成展示和与用户交互的目的。一个五子棋的UI界面需要哪些元素呢?
- 背景图片
- 棋盘
- 黑白棋子
- 其他元素
下面是我从网上找的背景图片、棋盘和棋子图片,均为jpg格式
经过观察发现背景图片过小,棋子过大,都需要调整到合适大小,因为是很简单的任务,使用PIL模块就足够了,不需要OpenCV了
from PIL import Image # 图片存储路径imagePath = 'xxx'im = Image.open(imagePath+'b1.jpg')# Resize图片大小,入口参数为一个tuple,为新的图片大小imBackground = im.resize((1024,768))imBackground.save(imagePath+'background.jpg','JPEG')
这样就可以把背景图片调整为
大小调整完成以后,又遇到一个新的问题,棋子图片为jpg格式,色深为24位,只有RGB三个通道,没有alpha透明度通道,我们就没办法提取出边缘不规则的图像,使用棋子图片的时候棋子外面的无用白色部分无法去掉,所以我们要为图片增加一个alpha通道,将外面的白色部分透明化。
from PIL import Imageimport numpy as npim = Image.open(imagePath+'wp.jpg')# 将图片转换为四通道new_im = im.convert('RGBA')# 得到图片的宽和高w,h = new_im.size# 将图片转化为np的array形式data = np.reshape(new_im,(h,w,4))new_data = data.copy()for x in range(h): for y in range(w): # 将白色无用部分设置为透明,其他部分不透明 if new_data[x,y,0:3].sum() == 255*3 : new_data[x,y,3] = 0 else: new_data[x,y,3] = 255# 将矩阵数据转换为图片并保存 new_im = Image.fromarray(new_data)new_im.save(imagePath+'whitepiece.png','PNG')
得到如下的图片:
这样,五子棋UI需要的一些基本元素的图片我们都做好了。
阅读全文
0 0
- 【机器学习实战】制作五子棋AI之一:图片预处理(尺寸变换和增加alpha通道)
- 【机器学习实战】制作五子棋AI之二:界面组合与棋子放置(pygame)
- 【机器学习实战】制作五子棋AI之三:基本规则的建立【1】
- 【机器学习实战】制作五子棋AI之四:基本规则的建立【2】
- 【alpha-bet剪枝】五子棋AI
- 机器学习实战--数据预处理
- 图片的alpha 通道
- java制作五子棋和象棋之一五子棋图形界面的设计
- 五子棋AI算法-Alpha Beta剪枝
- Unity工程里图片的RGB和Alpha通道的分离,以及显示所有带有Alpha通道贴图的Material
- Unity工程里图片的RGB和Alpha通道的分离,以及显示所有带有Alpha通道贴图的Material
- iOS--OC--图片拉伸和尺寸变换,图片简单处理
- 【随机】【加壳】【alpha-bet剪枝】五子棋AI
- 五子棋AI算法第三篇-Alpha Beta剪枝
- 机器学习实战之一---简单讲解决策树
- 前景图片alpha通道值的设置
- 前景图片alpha通道值的设置
- maskView配合带alpha通道图片
- ibatis的in函数的使用
- POJ 2299(树状数组求逆序对)
- 取消EditText自动聚焦弹出输入框
- UISplitViewController翻译
- 【Linux应用开发】malloc内存分配原理
- 【机器学习实战】制作五子棋AI之一:图片预处理(尺寸变换和增加alpha通道)
- ubuntu服务器安装配置apache2
- 浅谈Java中CountDownLatch的用法
- 【Unity】【UI.Text】【Code】通用代码库(五)——文字循环滚动+touch控制上下滚动
- 非阻塞式socket的select()用法
- mysql操作查询结果case when then else end用法举例
- post提交json数据后,java接收json
- 北大oj-1008 C语言
- 聚簇索引与非聚簇索引的区别