emguCv3.x 实现字符分割,轮廓检测
/// <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 实现字符分割,轮廓检测的更多相关文章
- EasyPR--开发详解(7)字符分割
大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...
- OpenCV+Python识别车牌和字符分割的实现
本篇文章主要基于python语言和OpenCV库(cv2)进行车牌区域识别和字符分割,开篇之前针对在python中安装opencv的环境这里不做介绍,可以自行安装配置! 车牌号检测需要大致分为四个部分 ...
- [转]图片中的字符分割提取(基于opencv)
http://blog.csdn.net/anqing715/article/details/16883863 源图片 像这些图片的字符就比较好操作,每个字符都独立,不连在一起,所以轮廓检测最好了.所 ...
- 车牌识别LPR(六)-- 字符分割
第六篇:字符分割 在知道了车牌字符的规律之后,可以根据车牌的特点对字符进行分割.一般最容易想到的方法就是根据车牌投影.像素统计特征对车牌图像进行字符分割的方法.是一种最常用的.最基本的.最简单的车牌字 ...
- EasyPR源码剖析(8):字符分割
通过前面的学习,我们已经可以从图像中定位出车牌区域,并且通过SVM模型删除“虚假”车牌,下面我们需要对车牌检测步骤中获取到的车牌图像,进行光学字符识别(OCR),在进行光学字符识别之前,需要对车牌图块 ...
- opencv 车牌字符分割 ANN网络识别字符
最近在复习OPENCV的知识,学习caffe的深度神经网络,正好想起以前做过的车牌识别项目,可以拿出来研究下 以前的环境是VS2013和OpenCV2.4.9,感觉OpenCV2.4.9是个经典版本啊 ...
- 轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015
主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, gr ...
- CDH5.4.5运行多字符分割记录
准备工作: 测试文件内容:cis_cust_imp_info 20131131|+|100010001001|+|BR01|+|2000.0120131131|+|100010001002|+|BR0 ...
- OpenCV图像轮廓检测
轮廓检测: 轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 一.关键函数1.1 cvFindContours函数功能:对图像进行轮廓检测,这个函数将 ...
随机推荐
- EntityFrame Work 5 性能注意事项(转自MSDN)
1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍 ...
- Django 中的 WSGI
Django 源码小剖: Django 中的 WSGI 2013-09-06 22:31 by 捣乱小子, 334 阅读, 0 评论, 收藏, 编辑 Django 其内部已经自带了一个方便本地测试的小 ...
- XML中的五个保留字符及实体引用
字符名称 字符 实体引用 和 & & 大于号 > > 小于号 < < 单引号 ‘ ' 双引号 “ " 在XML文档中,构成元素内 ...
- 【Chrome】如何在C++中增加给JavaScript调用的API
本文示例说明了如何在Chrome浏览器中增加JavaScript API.为了简化,先假设是在已有的namespace中增加一个新的API,文章的最后将指出如果增加一下全新的namespace所需注意 ...
- 30+WordPress古典风格的主题-古典却不失时尚
通过WordPress古典风格主题,你可以快速的让你的网站呈现古典情调,并在竞争中脱颖而出.古典风格的网页设计是非常受欢迎的,现在,你可能想知道为什么.很多人被古典风格吸引,他们将一些陈旧的,过时的, ...
- [置顶] 遵循Java EE标准体系的开源GIS服务平台架构
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...
- Hiberbate中的一对多关联查询
Hibernate中一对多关系的应用 案例:一个人可以拥有多辆小轿车 目的:通过hibernate的相关配置,利用HQL语句成功的查询出某人拥有某些车辆 1. 项目结构 2. domain类的创建详情 ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
- CodeForces 632D Longest Subsequence
暴力. 虽然$a[i]$最大有${10^9}$,但是$m$最大只有${10^6}$,因此可以考虑暴力. 记$cnt[i]$表示数字$i$有$cnt[i]$个,记$p[i]$表示以$i$为倍数的情况下, ...
- DB2表是否存在
select count(1) from syscat.tables where tabname='T1';