【导读】本文是专栏《计算机视觉40例简介》的第17个案例《求解数独图像》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。 目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。 大家可以在公众号“计算机视觉之光”回复关键字【案例17】获取本文案例的源代码及使用的测试图片等资料。 针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。 本文简要介绍了案例《求解数独图像》的基本流程,更详细的理论介绍请参考《计算机视觉40例简介》。 |
数独是非常流行的一种益智游戏,广受人们的喜爱。如图1所示,数独的目标是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,使每一行、每一列和每一个粗线宫(3*3)内都包含1到9之间的所有数字。数独也被称为“九宫格”游戏。
图1 数独
本案例中,我们的关注点在于对一张待求解的数独图像求解,并将求解结果打印在该图像上。主要过程如下:
书中详细介绍了上述处理过程的实现方法,并进行具体实现。下面把其中一些关键的知识点分享给大家。
1、识别过程
数独图像的求解过程如图2所示。图中,
图2 数独图像求解过程
2、定位单元格、识别数字
该步骤完成定位小单元格、定位数字轮廓。这里,主要借助了OpenCV中关于轮廓的结构关系这一知识点。
图3 定位单元格、定位数字轮廓
3、构造CNN模型
我们构造一个KNN模型用于识别数独图像内的数字。我们将构造模型放在一个函数内,其基本步骤如图4所示,具体如下:
图4 构造KNN流程
4、识别数字
识别数字的过程,就是使用KNN的过程。使用KNN时,直接把要识别的数据传递给训练好的KNN模型即可。其流程图如图5所示。其中:
图5 识别流程
5、求解数独
我们采用第三方库“py-sudoku”求解数独。
如图6所示图像,其中左侧是待求解数独、右侧是求解结果。
图6 显示数独
6、绘制数独求解结果
绘制数独时,直接判断每个单元格所在位置,然后在单元格附近绘制数独中对应的数值即可。绘制展示如图6所示。
图7 绘制数独结果
在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第17章《求解数独图像》获取详细内容。
《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。