相关疑难解决方法(0)

如何消除数独广场中的凸性缺陷?

我正在做一个有趣的项目:使用OpenCV从输入图像中解决数独(如Google护目镜等).我完成了任务,但最后我发现了一个问题,我来到这里.

我使用OpenCV 2.3.1的Python API进行编程.

以下是我的所作所为:

  1. 阅读图片
  2. 找到轮廓
  3. 选择具有最大面积的那个(并且也有点等于正方形).
  4. 找到角点.

    例如,如下:

    在此输入图像描述

    (请注意,绿线正确地与Sudoku的真实边界重合,因此可以正确扭曲数独.查看下一张图片)

  5. 将图像扭曲成完美的正方形

    例如:

    在此输入图像描述

  6. 执行OCR(我使用我在OpenCV-Python中的简单数字识别OCR中给出的方法)

而且方法效果很好.

问题:

看看这个图像.

在此图像上执行第4步,结果如下:

在此输入图像描述

绘制的红线是原始轮廓,它是数独边界的真实轮廓.

绘制的绿线是近似轮廓,它将是扭曲图像的轮廓.

当然,在数独的上边缘绿线和红线之间存在差异.因此,在翘曲时,我没有得到数独的原始边界.

我的问题 :

如何在数独的正确边界上扭曲图像,即红线,或者如何消除红线和绿线之间的差异?在OpenCV中有没有这方法?

python opencv sudoku computer-vision

179
推荐指数
3
解决办法
3万
查看次数

数字识别的建议

我正在编写一个Android应用程序来从图片中提取数独谜题.对于9x9 Sudoku网格中的每个单元格,我需要确定它是否包含数字1到9之一或是空白.我从像这样的Sudoku开始:

在此输入图像描述

我使用OpenCV预处理数独,以提取各个数字的黑白图像,然后通过Tesseract将它们放入.但Tesseract有一些限制:

  1. Tesseract很大,包含许多我不需要的功能(即全文识别),并且需要英语培训数据才能运行,我认为必须将其放到设备的SD卡上.至少我可以告诉它只使用数字查找数字tesseract.setVariable("tessedit_char_whitelist", "123456789");
  2. Tesseract经常将单个数字误解为一串数字,通常包含换行符.它有时也只是简单地弄错了.以下是上述数独的几个例子:

在此输入图像描述

我有三个问题:

  1. 有什么方法可以克服Tesseract的局限性吗?
  2. 如果没有,那么检测在Android上实现的个别数字(不是k-最近邻居)的有用,准确的方法是什么- 这可以是免费的库或DIY解决方案.
  3. 如何改进预处理以定位该方法?一种可能性,我认为是利用细化算法,通过所建议的这个帖子,但我不会去打扰实现它,除非它会有所作为.

ocr android opencv tesseract image-processing

14
推荐指数
1
解决办法
5281
查看次数