基于OpenCV及连通域分析进行文本块分割.docVIP

基于OpenCV及连通域分析进行文本块分割.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于OpenCV及连通域分析进行文本块分割.doc

基于OpenCV及连通域分析进行文本块分割 上一次通过投影的方式进行了文本块分割,但这种方法有很大的局限性,要求分行清晰、不能有字符跨多行、不能倾斜,而且对噪声比较敏感。还是拿上一回的图片,但是我在上面加了一个比较大的字,得出的结果就有问题了: 可以看到,由于右下角大大的“测”字跨了多行,导致水平投影分行时就出错了。 本次换一种方法,基于连通性分析来做。简单讲,就是把图像做一定的膨胀操作,使得同一个字符的不同部分以及相邻字符相互重叠到一起,变成一个整体,然后再通过分析找到每一个独立的块,排除掉噪声,剩下的基本就是符合条件的结果了。 直接上代码,后面再分析: using System; using System.Collections.Generic; using System.IO; using System.Text; using OpenCvSharp; using OpenCvSharp.Extensions; using OpenCvSharp.Utilities; namespace OpenCvTest { class Program { static void Main(string[] args) { //读入源文件 var src = IplImage.FromFile(“source.jpg”); //转换到灰度图 var gray = Cv.CreateImage(src.Size, BitDepth.U8, 1); Cv.CvtColor(src, gray, ColorConversion.BgrToGray); //做一下膨胀,x与y方向都做,但系数不同 var kernal = Cv.CreateStructuringElementEx(5, 2, 1, 1, ElementShape.Rect); Cv.Erode(gray, gray, kernal, 2); //二值化 Cv.Threshold(gray, gray, 0, 255, ThresholdType.BinaryInv | ThresholdType.Otsu); //检测连通域,每一个连通域以一系列的点表示,FindContours方法只能得到第一个域 var storage = Cv.CreateMemStorage(); CvSeqlt;CvPointgt; contour = null; Cv.FindContours(gray, storage, out contour, CvContour.SizeOf, ContourRetrieval.CComp, ContourChain.ApproxSimple); var color = new CvScalar(0, 0, 255); //开始遍历 while (contour != null) { //得到这个连通区域的外接矩形 var rect = Cv.BoundingRect(contour); //如果高度不足,或者长宽比太小,认为是无效数据,否则把矩形画到原图上 if(rect.Height gt; 10 amp;amp; (rect.Width * 1.0 / rect.Height) gt; 0.2) Cv.DrawRect(src, rect, color); //取下一个连通域 contour = contour.HNext; } Cv.ReleaseMemStorage(storage);

文档评论(0)

sunguohong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档