Emgucv使用中常用函数总结
Emgucv常用函数总结:
读取图片
Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor);
//根据路径创建指定的灰度图片
Mat scr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.Grayscale);
获取灰度 //图像类型转换, bgr 转成 gray 类型。MAT Bw = New MAT
CvInvoke.CvtColor(SCr, bw, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
//相当于二值化图 --黑白 根据大小10判断为0还是255
CvInvoke.Threshold(bw,bw,,,Emgu.CV.CvEnum.ThresholdType.BinaryInv);
//获取指定区域图片 SCr为mat类型
Rectangle rectangle = new Rectangle(,,,);
SCr = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle).Mat;
//将Mat类型转换为Image类型
Image<Bgr, byte> Su = SCr.ToImage<Bgr, byte>();
Image<Bgr, byte> Img = new Image<Bgr, byte>(new Bitmap(""));//路径声明
Image<Bgr, byte> Sub = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle);//指定范围
//指定参数获得结构元素
Mat Struct_element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(, ), new Point(-, -));
//膨胀
CvInvoke.Dilate(bw, bw, Struct_element, new Point(,),,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(, , ));
//腐蚀 当Struct_element模型创建不合理或者膨胀腐蚀次数较大时可能图像会发生偏移
CvInvoke.Erode(bw, bw, Struct_element, new Point(-, -), ,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(, , ));
//轮廓提取
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
//筛选后
CvInvoke.FindContours(bw, contours, null, Emgu.CV.CvEnum.RetrType.List, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
int ksize = contours.Size;//获取连通区域的个数。
VectorOfPoint contour = contours[i];//获取独立的连通轮廓
Rectangle rect = CvInvoke.BoundingRectangle(contour);//提取最外部矩形。
double Length = CvInvoke.ArcLength(contour, false);//计算连通轮廓的周长。
//画出轮廓
Mat mask = bw.ToImage<Bgr, byte>().CopyBlank().Mat;
//获取一张背景为黑色的图像, 大小与 scr 的大小一样, 类型为 Bgr。
CvInvoke.DrawContours(mask, contours, -, new MCvScalar(, , ));
Image<Ycc, byte> ycc_img = bgr_img.Convert<Ycc, byte>();//把 bgr颜色图片转成ycbcr类型。
Ycc min = new Ycc(, , );//最小值的颜色。
Ycc max = new Ycc(, , );//最大值得颜色。
Image<Gray, byte> result = ycc_img.InRange(min, max);//进行颜色提取。
Image<Bgr, byte> bgr_img = Ma.ToImage<Bgr, byte>();//载入一张 Bgr 类型的图片。
Bgr min = new Bgr(, , );//白色的最小值, 允许一定154的误差。
Bgr max = new Bgr(, , );//白色的最大值, 允许一定的误差。
Image<Gray, byte> result = bgr_img.InRange(min, max);//进行颜色提取。
Image<Bgr, Byte> imageSource = new Image<Bgr, Byte>(SCr.Bitmap);
Image<Hsv, Byte> imageHsv = imageSource.Convert<Hsv, Byte>();//将色彩空间从BGR转换到HSV
Image<Gray, Byte>[] imagesHsv = imageHsv.Split();//分解成H、S、V三部分
CvInvoke.AbsDiff(Ma1, Ma2, Ma); // 返回两幅图片或此图与某个yanse像素的差的绝对值的图片
CvInvoke.Add(Ma1, Ma2, Ma); // 返回这张图片与图片或颜色直接相加的图片(矩阵加法) (适应两种效果)
//CvInvoke.HConcat(Ma1, Ma2, Ma); //返回与另一张图片横向链接的图片
//CvInvoke.VConcat(Ma1, Ma2, Ma);//返回与另一张图片纵向链接的图片 //清除小于平均顶点10的二值图
Point[] po = { new Point(, ), new Point(res.Width, ), new Point(res.Width, minAvg - Gets.Fges[] + ), new Point(, minAvg - Gets.Fges[] + ) };
VectorOfPoint vp = new VectorOfPoint(po);
//CvInvoke.DrawContours(res, vp, -1, new MCvScalar(0, 0, 255));
CvInvoke.FillConvexPoly(res,vp,new MCvScalar(),LineType.EightConnected);//填充指定区域 /// <summary>
/// 灰度直方图计算 手动计算、/获取百分比的阀值 0.95
/// </summary>
public static void GetDenseHistogram95(ref int huidu, Mat ma)
{
DenseHistogram dense = new DenseHistogram(, new RangeF(, ));
dense.Calculate(new Image<Gray, Byte>[] { ma.ToImage<Gray, byte>() }, true, null);
//计算直方图数据。
float[] data = dense.GetBinValues();
float[] data2 = dense.GetBinValues();
//获得直方图数据。
/*** 进行数据归一化到[0,256]区域内并且绘制直方图***/
float max = data[]; //最大值
for (int j = ; j < data.Length; j++)
{
if (data[j] > max)
{
max = data[j];
}
}
float Sum = data2.ToList().Sum();
float FloCount = ;
for (int k = ; k < data.Length; k++)
{
data[k] = data[k] * / max;
FloCount += data2[k];
if (FloCount / Sum >= 0.95)
{
huidu = k;
break;
}
}} //各种颜色空间 Hsv/Rgb/Hls/Xyz/Ycc/Gray
public static Image<Hsv, Byte> imageHsv=new Image<Hsv, byte>(mat.Bitmap);
public static Image<Rgb, Byte> Rgbimg = new Image<Rgb, byte>(mat.Bitmap);
public static Image<Hls, Byte> Hlsimg = new Image<Hls, byte>(mat.Bitmap);
public static Image<Xyz, Byte> Xyzimg = new Image<Xyz, byte>(mat.Bitmap);
public static Image<Ycc, Byte> Yccimg = new Image<Ycc, byte>(mat.Bitmap);
public static Image<Gray, Byte> Grayimg = new Image<Gray, byte>(mat.Bitmap);
Image<Gray, Byte>[] imagesHsvs = imageHsv.Split();//分解成H、S、V三部分其他相同
//高斯滤波实现
CvInvoke.GaussianBlur(ma, ma, new Size(, ), );
//形态学闭运算,先膨胀后腐蚀 Others.matWithPhi(by)自定义模型
CvInvoke.MorphologyEx(ma, ma, Emgu.CV.CvEnum.MorphOp.Close, Others.matWithPhi(by), new Point(-, -), , Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(, , ));
CvInvoke.MedianBlur(ma, ma, );//中值滤波实现
CvInvoke.PutText(ma05, "G num: 1", new Point(, ), FontFace.HersheyComplex, 0.5, new MCvScalar()); //指定坐标(10, 100)显示文字,中文乱码,
VectorOfPoint vp = new VectorOfPoint();
CvInvoke.ConvexHull(pointof, vp);////查找最小外接矩形cvInpaint
double dou = CvInvoke.ContourArea(vp, false); //计算面积
VectorOfPoint vect = new VectorOfPoint();
CvInvoke.FindNonZero(ma, vect); //获取非0的点
Mat maSave1 = ma5.Clone();//备份 保留原有图片
CvInvoke.AdaptiveThreshold(ma, mas, , AdaptiveThresholdType.GaussianC, Emgu.CV.CvEnum.ThresholdType.Binary, , );//查找最适合二值图
收集的Emgucv的整理书籍资料和Emgucv动态调试器:下载地址
本文代码下载:下载
Emgucv使用中常用函数总结的更多相关文章
- EXCLE使用中常用函数和公式
1.查找重复项 IF(COUNTIF(A:A,A1)>1"重复""") 或者 IF(COUNTIF($A$1:$A$100,A1)=1,"&qu ...
- EmguCV常用函数总结
Emgucv常用函数总结: 读取图片 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor); //根据路径创建指定的 ...
- 【转载】gcc 使用中常用的参数及命令
本文转载自:http://www.cnblogs.com/yaozhongxiao/archive/2012/03/16/2400473.html 如需转载,请注明原始出处.谢谢. --------- ...
- 转战JS(1) 初探与变量类型、运算符、常用函数与转换
转战JS(1)初探与变量类型.运算符.常用函数与转换 做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不 ...
- STL之map与pair与unordered_map常用函数详解
STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称 ...
- oracle常用函数及示例
学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...
- 总结js常用函数和常用技巧(持续更新)
学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...
- [转]SQL 常用函数及示例
原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...
- PHP常用函数、数组方法
常用函数:rand(); 生成随机数rand(0,50); 范围随机数时间:time(); 取当前时间戳date("Y-m-d H:i:s"); Y:年 m:月份 d:天 H:当前 ...
随机推荐
- react项目后台及上线步骤
应同学要求,本人将react项目创建后台及上线流程书写如下: 前端部分 略…… 后台部分 (注:这里的后台是用的nodejs搭建的,使用的是express框架+ejs模板) 首先通过express快速 ...
- 同一个tomcat部署多个项目导致启动失败
内容描述在同一个tomcat部署多个打包成war包的项目导致启动失败,报错如下: 报错信息Error starting ApplicationContext. To display the condi ...
- 扩展欧几里得(exgcd)与同余详解
exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...
- Swift 4 关于Darwin这个Module
大家在做app或者framework的时候经常会用到生成随机数的方法arc4random系列,或者取绝对值abs()等.所以我有一次好奇的想看看在Developer Document里 是怎么描述这些 ...
- Linux系统GNOME主题安装与Tweaks工具使用
需要软件: GNOME Tweaks--使主题修改更加容易一个工具 安装主题: 下载主题:mac themes下载链接:https://www.gnome-look.org/p/1241688/ 这里 ...
- HTTPS加密那点事-对称、非对称加密、数字证书
转自:[漫画]https 加密那点事 首先,HTTP协议的缺点:没有对数据进行加密,都是明文传输的.如果要改进这种明文传输的协议,该如何做呢? 对称加密: 在每次发送真实数据之前,服务器先生成一把密钥 ...
- redhat7.4切换yum源为免费源
1.redhat是Linux系统中付费的企业版,虽然安装什么是免费的,但是需要注册. 如果你有注册码,暂请出门左拐(我没有注册码,所以我也不会注册,不用往下看了). Linux系统收费版:RedHat ...
- JSON字符串与Map互转
//一.map转为json字符串 public static String map2jsonstr(Map<String,?> map){ return JSONObject.toJSON ...
- springboot-文件上传xls及POI操作Excel
1.pom导入依赖文件 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-o ...
- PMI-ACP练习题知识积累-打印版
敏捷铁三角的参数:价值,质量,约束.传统的铁三角包括的参数是范围,进度和成本 敏捷计划的三个主要层级为:发布计划,迭代计划,每日计划 敏捷开发模型的特征包括 开发由多个迭代组成. 敏捷拥抱不确定性,而 ...