相关疑难解决方法(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万
查看次数

如何在Tesseract和OpenCV之间进行选择?

我最近遇到了TesseractOpenCV.看起来Tesseract是一个成熟的OCR引擎,OpenCV可以用作创建OCR应用程序/服务的框架.

我尝试在我的一些图像上使用Tesseract,它的准确性似乎不错.后来,我遇到了一个非常简单的使用OpenCV来使用Python执行OCR的教程,并给人留下了深刻的印象.几分钟后,我完成了系统的培训,其准确性很好.但是,当然,采用这种方法意味着我需要使用大型训练集来广泛训练我的系统.

我的具体问题如下:

  • 如何在Tesseract和使用OpenCV构建自定义OCR应用程序之间进行选择?
  • 有针对不同语言的Tesseract提供的培训数据集.OpenCV是否有类似的东西,以便我不必开始实现OCR?
  • 对于想成为商业应用程序哪个更好?

有什么建议?

注意:我24小时在计算机视觉领域,但我愿意花时间和精力学习先决条件.

python ocr opencv tesseract computer-vision

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

OpenCV检测数字

我在iPhone上使用OpenCV,需要检测图像中的数字.我将图像分割成较小的图像,因此每个图像只有一个数字(1-9).所有数字都是打印的,不是手写的.

用OpenCV算出数字的最佳方法是什么?

更新:

我已成功找到数字并将其提取出来.它们看起来像这样:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

提取它们时,它们的大小相同,依此类推.我已经保存了一堆图像并将它们放在OCR目录中,在那里它们被分类为数字.喜欢:ocr/1/100.jpg 101.jpg ....和ocr/2/200.jpg 201.jpg ....

然后我将使用与Basic OCR教程相同的方法:http://blog.damiles.com/?p = 93

但是,我正在为iPhone编程,不能使用C++代码(编译时出错等),我无法访问highgui.

我尝试使用cvMatchTemplate()并匹配一堆图像,但它看起来很糟糕......

我可以尝试其他任何想法吗?

ocr opencv image-processing

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

数字识别的建议

我正在编写一个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
查看次数

识别车牌的字符

我尝试使用OCR识别车牌的字符,但我的车牌质量较差. 在此输入图像描述

我试图以某种方式改进OCR的字符识别,但我最好的结果是:结果. 在此输入图像描述

甚至在这张照片上的tesseract也不承认任何角色.我的代码是:

#include <cv.h>         // open cv general include file
#include <highgui.h>    // open cv GUI include file
#include <iostream>     // standard C++ I/O
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <string>

using namespace cv;

int main( int argc, char** argv )
{
    Mat src;
    Mat dst;

    Mat const structure_elem = getStructuringElement(
                         MORPH_RECT, Size(2,2));

    src = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

    cvtColor(src,src,CV_BGR2GRAY);
    imshow( "plate", src );

    GaussianBlur(src, src, Size(1,1), 1.5, 1.5);
    imshow( "blur", src );

    equalizeHist(src, src);
    imshow( "equalize", src …
Run Code Online (Sandbox Code Playgroud)

c++ python opencv

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

使用KNN分类器进行数字识别前的预处理

现在我正在尝试使用OpenCV创建数字识别系统.WEB中有很多文章和例子(甚至在StackOverflow上).我决定使用KNN分类器,因为这个解决方案在WEB中最受欢迎.我找到了一个手写数字数据库,训练集为60k,错误率低于5%.

我使用本教程作为如何使用OpenCV使用此数据库的示例.我使用完全相同的技术和测试数据(t10k-images.idx3-ubyte)我有4%的错误率.但是当我尝试对自己的数字进行分类时,我会遇到更大的错误.例如:

  • 在此输入图像描述被认定为7
  • 在此输入图像描述在此输入图像描述被认可为5
  • 在此输入图像描述在此输入图像描述被认定为1
  • 在此输入图像描述被认可为8

等等(如果需要,我可以上传所有图像).

正如您所看到的,所有数字都具有良好的质量,并且易于识别.

所以我决定在分类之前做一些预处理.从上表MNIST数据库的网站,我发现人们使用歪斜校正,去除噪声,模糊像素移位技术.不幸的是,几乎所有文章的链接都被打破了.所以我决定自己做这样的预处理,因为我已经知道如何做到这一点.

现在,我的算法如下:

  1. 侵蚀图像(我认为我原来的数字太
    粗糙).
  2. 去除小轮廓.
  3. 阈值和模糊图像.
  4. 中心数字(而不是移位).

我认为在我的情况下不需要去偏移,因为所有数字通常都是旋转的.而且我也不知道如何找到合适的旋转角度.所以在这之后我得到了这些图像:

  • 在此输入图像描述也是1
  • 在此输入图像描述3(以前不是5)
  • 在此输入图像描述5(不是8)
  • 项目清单7(利润!)

所以,这样的预处理对我有所帮助,但我需要更好的结果,因为在我看来,这些数字应该被认可而没有问题.

任何人都可以通过预处理给我任何建议吗?谢谢你的帮助.

PS我可以上传我的源代码(c ++)代码.

c++ opencv image-processing image-recognition knn

13
推荐指数
1
解决办法
4338
查看次数

准确的二进制图像分类

我正试图从游戏板中提​​取一个项目的信件.目前,我可以检测游戏板,将其分割成各个方块并提取每个方块的图像.

我得到的输入是这样的(这些是单独的字母):

在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述

起初,我正在计算每个图像的黑色像素数,并将其用作识别不同字母的方法,这对于受控输入图像效果较好.但是,我遇到的问题是,对于与这些图像略有不同的图像,我无法做到这一点.

我每个字母大约有5个样本用于培训,这应该足够好了.

有谁知道什么是一个好的算法用于此?

我的想法是(在图像标准化后):

  • 计算图像和每个字母图像之间的差异,以查看哪一个产生最少的错误.但是,这不适用于大型数据集.
  • 检测角落并比较相对位置.
  • ???

任何帮助,将不胜感激!

python ocr opencv image-processing simplecv

12
推荐指数
2
解决办法
3957
查看次数

用于文本识别的图像预处理

在EmguCV中应用于图像进行文本识别的最佳图像预处理操作是什么?

我在这里包含了两个样本图像.

应用低通或高通滤波器将不合适,因为文本可以是任何尺寸.我尝试了中位数和双边滤波器,但它们似乎并没有太大影响图像.

理想的结果是二进制图像,所有文本都是白色的,其余大部分是黑色的.然后将该图像发送到OCR引擎.

谢谢

opencv image-processing emgucv

12
推荐指数
1
解决办法
4万
查看次数

如何从UCI创建像"Letter Image Recognition Dataset"这样的图像数据

我使用OpenCV中的letter_regcog示例,它使用了UCI的数据集,其结构如下:

Attribute Information:
     1. lettr   capital letter  (26 values from A to Z)
     2. x-box   horizontal position of box  (integer)
     3. y-box   vertical position of box    (integer)
     4. width   width of box            (integer)
     5. high    height of box           (integer)
     6. onpix   total # on pixels       (integer)
     7. x-bar   mean x of on pixels in box  (integer)
     8. y-bar   mean y of on pixels in box  (integer)
     9. x2bar   mean x variance         (integer)
    10. y2bar   mean y variance         (integer)
    11. xybar …

c++ opencv

7
推荐指数
1
解决办法
1万
查看次数

pytesseract使用tesseract 4.0数字仅不起作用

有人试图获取仅在python中调用tesseract 4.0的最新版本的数字吗?

下面的代码在3.05中有效,但在4.0中仍返回字符,我尝试删除所有配置文件,但数字文件仍然无效。任何帮助都会很棒:

im是日期的图像,黑色文本白色背景:

import pytesseract
im =  imageOfDate
im = pytesseract.image_to_string(im, config='outputbase digits')
print(im)
Run Code Online (Sandbox Code Playgroud)

python tesseract

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