【图像处理】利用python和opencv解数独

本文介绍了如何使用Python和OpenCV处理数独图像,包括读取图片、反色处理、裁剪、分割以及数字识别。通过ImageProcessor类实现了图像识别,最终得出数独矩阵,但存在部分识别错误。
摘要由CSDN通过智能技术生成

工具

系统:Windows 10

Python版本:Version 3.6

OpenCV版本:Version 2.4.9


具体实现

本文将用python语言,结合OpenCV视觉库来解决数独问题。主要工作为用OpenCV的相关函数来获取图形上的数独矩阵,然后设计一定的算法求出数独的解,最后在图片上画出数独的解。

下图为一个数独题目,数独的解题实际上就是在一个9*9网格上的空白处填上若干数字,并且,要使填到空白格子上的数字在其所在的行、所在的列和所在的宫格上不能重复出现。宫格是一个3*3的网格,整个数独网格又可以分为9个宫格。


上面的数独可以用如下的矩阵表示:

[[0 0 0 7 0 0 4 1 0]
 [0 0 3 0 2 0 0 0 6]
 [1 0 7 4 0 0 5 2 3]
 [4 0 1 6 0 0 0 8 0]
 [0 2 9 0 7 0 6 3 0]
 [0 7 0 0 0 4 2 0 1]
 [7 5 2 0 0 6 3 0 9]
 [3 0 0 0 4 0 1 0 0]
 [0 1 4 0 0 3 0 0 0]]


首先要做的工作就是从图像中识别出这个矩阵(空白空格用0表示)。具体的步骤如下:

1.读取图片,并获取灰度图

2.反色处理,使得数字的颜色为白色

3.裁剪图形,裁去多余的边界

4.分割图形,将原图分成9*9=81个更小的图形

5.识别图形,将识别的数字填入numArray


图像识别部分的功能我用一个名字叫ImageProcessor的类来实现,具体代码如下展示。

from cv2 import *
from numpy import *

class ImageProcessor:
    __originalImage=0   #原图
    __grayScaleImage=0  #灰度图
    __binaryImage=0     #二值图
    __invBinaryImage=0  #颜色反转之后的二值图
    __theCutImage=0     #裁剪后的图像
    __tightSize=[]      #裁剪后的图像的尺寸,宽度和高度
    __cutImage=0
    __imageList=[]      #81个小格子

    numArray
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值