这个是数字图像处理的课程设计,用了三个星期,总算是把我的斗地主记牌器做出来了,灵感是来自于CSDN上的一篇文章:但他就写了个想法,我觉得挺有意思的,又恰好要做课程设计而且也涉及到了学习的内容,就着手做了起来。
在网上找了一圈,并没有发现完整的这种类型的斗地主记牌器,只好自己来。左手看别人博客,右手看看库函数,一点一点实现。虽然过程中也遇到了不少问题,但还是一一解决了。这次的课程设计让我学到了不少东西,从框架(虽然还是很乱,但毕竟第一次搞这种比较大的py代码,甚至可以说没有框架)、界面到各个小问题的认识和实现都有了一定的提高。我决定啦,专业方向选择人工智能一块,决心考研,读书深造,好好努力!
三、一些仍然存在的问题测试发现:
对于单牌、对子、顺子、连对、炸弹、3带1、3带2、4带2、飞机都有着较高的准确度对于飞机带两个对子的那种换行的牌型是无法进行识别的。会漏掉第二行的纸牌。若腾讯Ai无法识别出内容,会导致闪退网络问题导致解码失败,闪退在连对、顺子等特效播放的时间进行截图会导致识别结果错误甚至闪退大王小王无法区分对家出牌的王无法识别一些不为所知的错误导致的闪退 四、软件主体软件主体为4个py文件
imageCapture图像截取(截取斗地主界面)ImagePartition图像分割(截取纸牌部分)Tencent(文字识别)Mian2(pyqt5制作的用户交互界面) 五、原理(以手牌识别为例)原始图像,从系统的截图api获取 切片操作获取大致区域 通过参数获取图片
转码,将RGB格式转为HSV格式用于掩码处理
通过白色掩码提取白色区域 转回RGB模式后转为灰度图
使用闭运算消除内容物,寻找轮廓
使用开运算消除外容物,降噪 使用cv2.findContours函数提出轮廓
根据上面得到的轮廓的上下左右的最大值构建矩形,在灰度图中使用切片操作直接获取结果 根据纸牌的比例进行切割 将结果返回到获取具体手牌函数(下面这个图不是上面的结果)
六、源码https://github.com/xiaooo-jian/Digital-image-processing-Final-Work
劳烦点个星星啦
参考博客安卓基于图像识别和CNN做出一个通用的斗地主记牌器(一)
C++ 纯 OpenCV 实现扑克牌实时识别
springboot + maven实现的车牌识别及训练系统
使用OpenCV的findContours获取轮廓并切割(python)
Python实现屏幕截图的两种方式
【python】【文字识别】利用腾讯云调用通用图片文字识别接口,识别图片中的文字
Python中opencv所使用的图片格式与 base64转换