/// <summary>
/// 获取区域
/// </summary>
/// <param name="bitmap"></param>
/// <param name="graybtm"></param>
/// <returns></returns>
public static Bitmap FindBundingBox(Bitmap bitmap, out Bitmap graybtm,out List<Rectangle> rects)
{
Image<Bgr, byte> img = new Image<Bgr, byte>(bitmap);
Image<Gray, byte> gray = new Image<Gray, byte>(img.Width, img.Height);
Image<Bgr, byte> resuImage = new Image<Bgr, byte>(img.Width, img.Height);
Image<Gray, byte> dnc = new Image<Gray, byte>(img.Width, img.Height);
CvInvoke.CvtColor(img, gray, ColorConversion.Bgra2Gray);//灰度化
//做一下膨胀,x与y方向都做,但系数不同
var kernal = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(, ), new Point(, ));
CvInvoke.Erode(gray, gray, kernal, new Point(, ), , BorderType.Default, new MCvScalar());
//CvInvoke.Canny(gray, gray, 100, 60);
CvInvoke.Threshold(gray, gray, , , ThresholdType.BinaryInv | ThresholdType.Otsu);//二值化
//检测连通域,每一个连通域以一系列的点表示,FindContours方法只能得到第一个域
graybtm = gray.ToBitmap();
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
CvInvoke.FindContours(gray, contours, dnc, RetrType.Ccomp, ChainApproxMethod.ChainApproxSimple);
var color = new MCvScalar(, , );
Console.WriteLine(contours.Size);
rects = new List<Rectangle>();
//开始遍历
for (int i = ; i < contours.Size; i++)
{
//得到这个连通区域的外接矩形
var rect = CvInvoke.BoundingRectangle(contours[i]);
//如果高度不足,或者长宽比太小,认为是无效数据,否则把矩形画到原图上
if (rect.Height > && rect.Width > )
{
rects.Add(rect);
CvInvoke.DrawContours(resuImage, contours, i, color);
}
} return img.ConcateVertical(resuImage).ToBitmap();
}
 private void StandardRects()
{
List<Rectangle> removeList=new List<Rectangle>();
foreach (var item in glbRect)
{
if (glbRect.Exists(o => o.Contains(item) && o!=item))
{
removeList.Add(item);
}
}
glbRect.RemoveAll(o => removeList.Contains(o));
glbRect=glbRect.OrderBy(o => o.X).ToList();
lb_count.Text = "轮廓总数:" + glbRect.Count;
}

emguCv3.x 实现字符分割,轮廓检测的更多相关文章

  1. EasyPR--开发详解(7)字符分割

    大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...

  2. OpenCV+Python识别车牌和字符分割的实现

    本篇文章主要基于python语言和OpenCV库(cv2)进行车牌区域识别和字符分割,开篇之前针对在python中安装opencv的环境这里不做介绍,可以自行安装配置! 车牌号检测需要大致分为四个部分 ...

  3. [转]图片中的字符分割提取(基于opencv)

    http://blog.csdn.net/anqing715/article/details/16883863 源图片 像这些图片的字符就比较好操作,每个字符都独立,不连在一起,所以轮廓检测最好了.所 ...

  4. 车牌识别LPR(六)-- 字符分割

    第六篇:字符分割 在知道了车牌字符的规律之后,可以根据车牌的特点对字符进行分割.一般最容易想到的方法就是根据车牌投影.像素统计特征对车牌图像进行字符分割的方法.是一种最常用的.最基本的.最简单的车牌字 ...

  5. EasyPR源码剖析(8):字符分割

    通过前面的学习,我们已经可以从图像中定位出车牌区域,并且通过SVM模型删除“虚假”车牌,下面我们需要对车牌检测步骤中获取到的车牌图像,进行光学字符识别(OCR),在进行光学字符识别之前,需要对车牌图块 ...

  6. opencv 车牌字符分割 ANN网络识别字符

    最近在复习OPENCV的知识,学习caffe的深度神经网络,正好想起以前做过的车牌识别项目,可以拿出来研究下 以前的环境是VS2013和OpenCV2.4.9,感觉OpenCV2.4.9是个经典版本啊 ...

  7. 轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015

    主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, gr ...

  8. CDH5.4.5运行多字符分割记录

    准备工作: 测试文件内容:cis_cust_imp_info 20131131|+|100010001001|+|BR01|+|2000.0120131131|+|100010001002|+|BR0 ...

  9. OpenCV图像轮廓检测

    轮廓检测: 轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 一.关键函数1.1  cvFindContours函数功能:对图像进行轮廓检测,这个函数将 ...

随机推荐

  1. Git - error: RPC failed; result=22, HTTP code = 401 fatal: The remote end hung up unexpectedly

    在用Git管理代码版本时,用git push命令提交代码,提示: 有以下几个可能性: Git 版本过低.GitCafe 推荐使用的 Git 版本是 >= 1.7. $ git --version ...

  2. JUC.Condition学习

    JUC.Condition学习笔记[附详细源码解析] 目录 Condition的概念 大体实现流程 I.初始化状态 II.await()操作 III.signal()操作 3个主要方法 Conditi ...

  3. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 二

    Linux档案与目录管理 1.一些比较特殊的目录,需要用力的记下来 .         代表当前层目录 ..        代表上一层目录 -        代表前一个工作目录   (这个好屌!其他的 ...

  4. Linux系统小问题解决总结

    [解决Ubuntu missing launcher and menu bar的问题] 按下ctrl + Alt + T打开终端: 输入以下命令: dconf reset -f /org/compiz ...

  5. IP选路

    IP选路 1.概述      路由算法是用于获取路由表中的路由项目.它是路由选择协议的核心. 2.路由算法的分类      从路由算法能否随网络的通信量或拓扑自适应的进行调整变化来分,可以分为两类. ...

  6. DateTimePicker.Text不靠谱

    DateTimePicker.Text不靠谱 获取时:在DateTimePicker.ValueChanged事件中,获取到的Text有可能是string.Empty!!!,特别当ValueChang ...

  7. Android 手机进入不了fastboot模式的解决方案

    本方案仅针对linux terminal下刷手机img文件的情况: fastboot的通常流程如下:   adb reboot bootloader  //进入bootloader 模式  fastb ...

  8. make deb for debian/ubuntu, package software for debian/ubuntu

    here you may find useful information: =====================X8---------------------------------8X==== ...

  9. SSD Buffer Pool Extension

    SSD Buffer Pool Extension 简介 SQL Server 2014中另一个非常好的功能是,可以将SSD虚拟成内存的一部分,来供SQL Server数据页缓冲区使用.通过使用SSD ...

  10. cocos2d-x场景切换与过渡效果

    场景切换 void  MyScene::daySceneCallback(CCObject *pSender) {     CCScene *scene =  new  MyScene();      ...