OpenCV检测数字

Lin*_*nus 20 ocr opencv image-processing

我在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()并匹配一堆图像,但它看起来很糟糕......

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

Jai*_*tes 8

您可以从阅读主成分分析(PCA),Fisher线性判别分析(LDA)和支持向量机(SVM)开始.这些是对OCR非常有用的分类方法,并且有任何语言的库,包括C++,Python,C#等.

事实证明,OpenCV已经在PCASVM上实现了出色的实现.我还没有看到任何针对OCR的OpenCV代码示例,但您可以使用某些修改版的面部分类来执行字符分类.这个网站是OpenCV人脸识别代码的绝佳资源.


Rob*_*bAu 5

如果打印了数字,那么工作就非常简单,您只需要找出一组合适的特征来匹配即可。如果数字是一种字体,您可以采用这种方法:

  • 提取号码
  • 找到边界框
  • 将图像缩小到 10x8 之类的大小,尝试匹配纵横比
  • 针对小型训练集执行此操作,获取每个数字的“平均”图像

  • 对于新图像,请按照上述步骤操作,但最后一个只是与每个数字模板的绝对图像差异。然后取差异之和(差异图像中的像素)。最小的那个就是你的号码。

以上都是OpenCV的基本操作。


mel*_*lps 1

目标C++?尝试将 .m 文件重命名为 .mm,然后就可以在 iPhone 项目中使用 C++。