我正在开发一个应用程序,使用c ++中的opencv从图像中读取字母和数字.我首先将给定的彩色图像和颜色模板更改为二进制图像,然后调用方法cvMatchTemplate().这个方法只是突出了模板匹配的区域..但不清楚..我只是不想看到区域..我需要解析图像中的字符(字母和数字).我是openCV的新手.有没有人知道任何其他方法来获得结果?

图像取自相机.样本图像如上所示.我需要从LED显示屏(130和Delft Tanthaf)获取所有文本.
朋友我尝试了面部检测的示例应用程序,它检测到面部.HaarCascade文件随openCV一起提供.我刚刚加载了该文件并调用了方法cvHaarDetectObjects(); 要检测字母,我使用openCV提供的应用程序letter_recog.cpp创建了xml文件.但是当我加载这个文件时,它显示一些错误(OpenCV错误:UnSpecified error> in unknown function,file ........\ocv\opencv\src\cxcore\cxpersistence.cpp,第4720行).我在网上搜索了这个错误,并获得了有关使用的lib文件的信息.我这样做了,但错误仍然存在.是我的xml文件的错误或调用方法加载此xml文件((CvHaarClassifierCascade*)cvLoad("builded xml file name",0,0,0);)?? 请帮忙...
提前致谢
Kao*_*ire 17
从OpenCV 3.0(在活动开发中),您可以使用内置的"场景文本"对象检测模块〜
参考:http://docs.opencv.org/3.0-beta/modules/text/doc/erfilter.html
示例:https://github.com/Itseez/opencv_contrib/blob/master/modules/text/samples/textdetection.cpp
文本检测基于这两篇论文:
[Neumann12] Neumann L.,Matas J.:实时场景文本定位和识别,CVPR 2012.该论文可在线获取:http://cmp.felk.cvut.cz/~neumalu1/neumann-cvpr2012.pdf
[Gomez13] Gomez L.和Karatzas D.:自然场景的多脚本文本提取,ICDAR 2013.该论文可在http://refbase.cvc.uab.es/files/GoK2013.pdf在线获取.
一旦找到场景中文本的位置,就可以针对这些切片运行任何类型的标准OCR(Tesseract OCR很常见).现在,使用OpenCV的Tesseract新界面,opencv中有一个端到端的示例:
lig*_*ist 10
由于光照不一致,方向改变,尺度变化等,模板匹配往往不适合这种应用.解决这个问题的典型方法是引入机器学习.您通过训练自己的助推分类器尝试做的是一种可能的方法.但是,我认为你没有正确地进行培训.你提到你给了它1个徽标作为积极的训练图像,还有5个不包含徽标的图像作为反面例子?通常,您需要训练样本大约数百或数千或更多.您不可能使用6个训练样本进行训练并期望它能够正常运行.
如果您不熟悉机器学习,这里大致是您应该做的:
1)你需要收集你想要检测的对象的许多正面训练样本(从一百个开始,但通常越多越好).如果您尝试检测图像中的单个字符,则会获得单个字符的裁剪图像.您可以从MNIST数据库开始.更好的是,为了解决您的特定问题而训练分类器,从照片中获取许多裁剪的公共角色图像.如果您尝试检测整个矩形LED板面板,请使用它们的图像作为您的正面训练样本.
2)您需要收集许多负面训练样本.它们的数量应与您拥有的正面训练样本数量相同.这些可能是您将运行探测器的图像中出现的其他对象的图像.例如,您可以裁剪公交车前部,路面,沿路等树木的图像,并将其用作反面示例.这是为了帮助分类器在运行探测器的图像中排除这些对象.因此,负面示例不仅仅是包含您不想检测的对象的任何图像.它们应该是可能被误认为是您在探测器上运行的图像中检测到的对象的对象(至少对于您的情况而言).
请参阅以下链接,了解如何训练分类器的级联并生成XML模型文件:http://note.sonots.com/SciSoftware/haartraining.html
即使您提到您只想检测单个字符而不是总线上的整个LED面板,我建议先检测LED面板,以便本地化包含感兴趣字符的区域.之后,要么在这个较小的区域内执行模板匹配,要么运行经过训练的分类器,以识别使用滑动窗口方法获得的该区域中的像素块上的各个字符,并且可能是多尺度的.(注意:你上面提到的haarcascade提升分类器会检测字符,但它不会告诉你它检测到哪个字符,除非你只训练它来检测那个特定字符......)以滑动窗口的方式检测这个区域中的字符会给出您输入字符的顺序,这样您就可以将它们串成单词等.
希望这可以帮助.
在分别发现@KaolinFire提到的OpenCV 3中的场景文本模块之后,我偶然发现了我的这个老帖子.
对于那些好奇的人来说,这是在OP给出的样本图像上运行该检测器的结果.请注意,检测器能够本地化文本区域,即使它返回多个边界框.
请注意,此方法并非万无一失(至少在OpenCV中使用默认参数的此实现).它往往会产生误报,特别是当输入图像包含许多"干扰者"时.以下是在Google街景数据集上使用此OpenCV 3文本检测器获得的更多示例:
请注意,它倾向于在平行线(例如,窗户,墙壁等)之间找到"文本".由于OP的输入图像可能包含室外场景,因此这将是一个问题,特别是如果他/她不将感兴趣的区域限制在LED标志周围的较小区域.
看起来如果你能够定位只包含文本的"粗糙"区域(例如,只是OP样本图像中的LED标志),那么运行这个算法可以帮助你获得更紧密的边界框.但是你必须处理假阳性(可能会丢弃小区域或使用基于关于字母出现在LED标志上的方式的知识的启发法在重叠的边界框中挑选).
这里有更多关于文本检测的资源(讨论+代码+数据集).
码
数据集
您可以在此处找到google streetview和MSRA数据集.虽然这些数据集中的图像与总线上LED标志的图像并不完全相同,但它们可能有助于从几种竞争算法中选择"最佳"执行算法,或者从头开始训练机器学习算法.
http://www.iapr-tc11.org/mediawiki/index.php/Datasets_List