EmguCV使用中常用函数总结

  1 //EmguCV常用函数总结:
  2 //读取图片
  3 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor);
  4 //根据路径创建指定的灰度图片
  5 Mat scr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.Grayscale);
  6 获取灰度    //图像类型转换, bgr 转成 gray 类型。MAT Bw = New MAT
  7 CvInvoke.CvtColor(SCr, bw, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
  8 //相当于二值化图 --黑白 根据大小10判断为0还是255
  9 CvInvoke.Threshold(bw,bw,10,255,Emgu.CV.CvEnum.ThresholdType.BinaryInv);
 10 //获取指定区域图片 SCr为mat类型
 11 Rectangle rectangle = new Rectangle(10,10,10,10);
 12 SCr = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle).Mat;
 13 //将Mat类型转换为Image类型
 14 Image<Bgr, byte> Su = SCr.ToImage<Bgr, byte>();
 15 Image<Bgr, byte> Img = new Image<Bgr, byte>(new Bitmap(""));//路径声明
 16 Image<Bgr, byte> Sub = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle);//指定范围
 17 //指定参数获得结构元素
 18 Mat Struct_element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(3, 3), new Point(-1, -1));
 19 //膨胀
 20 CvInvoke.Dilate(bw, bw, Struct_element, new Point(1,1),3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));
 21 //腐蚀 当Struct_element模型创建不合理或者膨胀腐蚀次数较大时可能图像会发生偏移
 22 CvInvoke.Erode(bw, bw, Struct_element, new Point(-1, -1), 3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));
 23 //轮廓提取
 24 VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
 25 //筛选后
 26 CvInvoke.FindContours(bw, contours, null, Emgu.CV.CvEnum.RetrType.List, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
 27 int ksize = contours.Size;//获取连通区域的个数。
 28 VectorOfPoint contour = contours[i];//获取独立的连通轮廓
 29 Rectangle rect = CvInvoke.BoundingRectangle(contour);//提取最外部矩形。
 30 double Length = CvInvoke.ArcLength(contour, false);//计算连通轮廓的周长。
 31 //画出轮廓
 32 Mat mask = bw.ToImage<Bgr, byte>().CopyBlank().Mat;
 33 //获取一张背景为黑色的图像, 大小与 scr 的大小一样, 类型为 Bgr。
 34 CvInvoke.DrawContours(mask, contours, -1, new MCvScalar(0, 0, 255));
 35 Image<Ycc, byte> ycc_img = bgr_img.Convert<Ycc, byte>();//把 bgr颜色图片转成ycbcr类型。
 36 Ycc min = new Ycc(152, 38, 118);//最小值的颜色。
 37 Ycc max = new Ycc(94, 43, 118);//最大值得颜色。
 38 Image<Gray, byte> result = ycc_img.InRange(min, max);//进行颜色提取。
 39 Image<Bgr, byte> bgr_img = Ma.ToImage<Bgr, byte>();//载入一张 Bgr 类型的图片。
 40 Bgr min = new Bgr(255, 255, 255);//白色的最小值, 允许一定154的误差。
 41 Bgr max = new Bgr(255, 255, 255);//白色的最大值, 允许一定的误差。
 42 Image<Gray, byte> result = bgr_img.InRange(min, max);//进行颜色提取。
 43 Image<Bgr, Byte> imageSource = new Image<Bgr, Byte>(SCr.Bitmap);
 44 Image<Hsv, Byte> imageHsv = imageSource.Convert<Hsv, Byte>();//将色彩空间从BGR转换到HSV
 45 Image<Gray, Byte>[] imagesHsv = imageHsv.Split();//分解成H、S、V三部分
 46 CvInvoke.AbsDiff(Ma1, Ma2, Ma); // 返回两幅图片或此图与某个yanse像素的差的绝对值的图片
 47 CvInvoke.Add(Ma1, Ma2, Ma); // 返回这张图片与图片或颜色直接相加的图片(矩阵加法)  (适应两种效果)
 48 //CvInvoke.HConcat(Ma1, Ma2, Ma); //返回与另一张图片横向链接的图片
 49 //CvInvoke.VConcat(Ma1, Ma2, Ma);//返回与另一张图片纵向链接的图片
 50
 51 //清除小于平均顶点10的二值图
 52 Point[] po = { new Point(0, 0), new Point(res.Width, 0), new Point(res.Width, minAvg - Gets.Fges[1] + 52), new Point(0, minAvg - Gets.Fges[1] + 52) };
 53 VectorOfPoint vp = new VectorOfPoint(po);
 54 //CvInvoke.DrawContours(res, vp, -1, new MCvScalar(0, 0, 255));
 55 CvInvoke.FillConvexPoly(res,vp,new MCvScalar(0),LineType.EightConnected);//填充指定区域
 56
 57 /// <summary>
 58 /// 灰度直方图计算  手动计算、/获取百分比的阀值  0.95
 59 /// </summary>
 60 public static void GetDenseHistogram95(ref int huidu, Mat ma)
 61 {
 62             DenseHistogram dense = new DenseHistogram(256, new RangeF(0, 255));
 63             dense.Calculate(new Image<Gray, Byte>[] { ma.ToImage<Gray, byte>() }, true, null);
 64             //计算直方图数据。
 65             float[] data = dense.GetBinValues();
 66             float[] data2 = dense.GetBinValues();
 67             //获得直方图数据。
 68             /*** 进行数据归一化到[0,256]区域内并且绘制直方图***/
 69             float max = data[0]; //最大值
 70             for (int j = 1; j < data.Length; j++)
 71             {
 72                 if (data[j] > max)
 73                 {
 74                     max = data[j];
 75                 }
 76             }
 77             float Sum = data2.ToList().Sum();
 78             float FloCount = 0;
 79             for (int k = 0; k < data.Length; k++)
 80             {
 81                 data[k] = data[k] * 256 / max;
 82                 FloCount += data2[k];
 83                 if (FloCount / Sum >= 0.95)
 84                 {
 85                     huidu = k;
 86                     break;
 87                 }
 88             }
 89 }
 90
 91 //各种颜色空间 Hsv/Rgb/Hls/Xyz/Ycc/Gray
 92 public static Image<Hsv, Byte> imageHsv=new Image<Hsv, byte>(mat.Bitmap);
 93 public static Image<Rgb, Byte> Rgbimg = new Image<Rgb, byte>(mat.Bitmap);
 94 public static Image<Hls, Byte> Hlsimg = new Image<Hls, byte>(mat.Bitmap);
 95 public static Image<Xyz, Byte> Xyzimg = new Image<Xyz, byte>(mat.Bitmap);
 96 public static Image<Ycc, Byte> Yccimg = new Image<Ycc, byte>(mat.Bitmap);
 97 public static Image<Gray, Byte> Grayimg = new Image<Gray, byte>(mat.Bitmap);
 98 Image<Gray, Byte>[] imagesHsvs = imageHsv.Split();//分解成H、S、V三部分其他相同
 99 //高斯滤波实现
100 CvInvoke.GaussianBlur(ma, ma, new Size(5, 5), 4);
101 //形态学闭运算,先膨胀后腐蚀  Others.matWithPhi(by)自定义模型
102 CvInvoke.MorphologyEx(ma, ma, Emgu.CV.CvEnum.MorphOp.Close, Others.matWithPhi(by), new Point(-1, -1), 3, Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));
103 CvInvoke.MedianBlur(ma, ma, 5);//中值滤波实现
104 CvInvoke.PutText(ma05, "G num: 1", new Point(10, 100), FontFace.HersheyComplex, 0.5, new MCvScalar(255)); //指定坐标(10, 100)显示文字,中文乱码,
105 VectorOfPoint vp = new VectorOfPoint();
106 CvInvoke.ConvexHull(pointof, vp);////查找最小外接矩形cvInpaint
107 double dou = CvInvoke.ContourArea(vp, false);  //计算面积
108 VectorOfPoint vect = new VectorOfPoint();
109 CvInvoke.FindNonZero(ma, vect); //获取非0的点
110 Mat maSave1 = ma5.Clone();//备份 保留原有图片
111 CvInvoke.AdaptiveThreshold(ma, mas, 255, AdaptiveThresholdType.GaussianC, Emgu.CV.CvEnum.ThresholdType.Binary, 3, 0);//查找最适合二值图

原文地址:https://www.cnblogs.com/ybqjymy/p/12170848.html

时间: 2024-11-13 08:02:20

EmguCV使用中常用函数总结的相关文章

【转载】gcc 使用中常用的参数及命令

本文转载自:http://www.cnblogs.com/yaozhongxiao/archive/2012/03/16/2400473.html 如需转载,请注明原始出处.谢谢. ---------------------------------------------------------------------------------------- gcc 使用中常用的参数及命令 1.  执行过程 虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅

转战JS(1) 初探与变量类型、运算符、常用函数与转换

转战JS(1)初探与变量类型.运算符.常用函数与转换 做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不是那么简单的.很多的细节部分以前都没有注意到,现在把学习的知识点记录下来,做为学习笔记,好时不时看看.如果有什么错误,还请各位看官多多包涵.多多指正. JavaScript是一门轻量型的面向Web编程的脚本言语言,常被简称为:JS.广泛应用于PC和各种移动设备中,常和HTML.CSS一起组成网页页面

VBA常用函数

测试类函数: IsNumeric(x) - 是否为数字, 返回Boolean结果. IsDate(x)? - 是否是日期, 返回Boolean结果. IsEmpty(x) - 是否为Empty, 返回Boolean结果. IsArray(x) - 指出变量是否为一个数组. IsError(expression) - 指出表达式是否为一个错误值. IsNull(expression) - 指出表达式是否不包含任何有效数据 (Null). IsObject(identifier) - 指出标识符是否

Data Frame的常用函数

1.DataFrame的常用函数: (1)np.abs(frame) 绝对值, (2)apply function, lambda f= lambda x: x.max()-x.min(),frame.apply(f); frame.apply(f,axis = 1) f(x), def f(x): return Series([x.min(),x.max()], index=['min','max']),frame.apply(f)(3) applymap format f= lambda x

Oracle SQL语言之常用函数_超越OCP精通Oracle视频教程培训30

Oracle SQL语言之常用函数_超越OCP精通Oracle视频教程培训30 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第5/5套:Oracle SQL语言之常用函数.主要学习Oracle数据库SQL聚合函数,分组函数,字符函数,转换函数,日期字符数字转换,日期函数,集合函数,分析函数等. Oracle SQL语言之常用函数,课程内容详细如下: 聚合函数-数据统计 分组函数-使用group by与havin

MySQL学习笔记(三)——计算字段及常用函数

拼接字段-Concat()函数        将值连接在一起构成单个值.注意:大多数DBMS使用+或者||来实现拼接,mysql则使用Concat()函数来实现. 去空格函数-Trim函数        Trim去掉串左右两边的空格,RTrim去掉串右边的空格,LTrim去掉左边的空格. 使用别名-AS        我们希望查出的新列能有个简介明了的列名,可以用AS来赋予别名. 执行算术运算(+,-,*,/) 大多数sql实现支持以下类型的函数: 1.用于处理文本串(如删除或填充值,转换值为大

162个php常用函数基础用法(个人整理)

PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 浮点数进一取整 3.floor(): 舍去法取整 echo floor(9.999); // 9 浮点数直接舍去小数部分 4.fmod(): 浮点数取余 ? 1 2 3 4 $x = 5.7; $y = 1.3; // 两个浮点数,x>y 浮点余数 $r = fmod($x, $y); // $r

sql server常用函数、常用语句

一.常用函数 1.字符串函数 : charindex(':','abc:123')    --寻找一个字符在一段字符串中起始的位置 len('zhangsan')   --获取一段字符串的长度 left('Ly,君子之耀',2) --从一段字符串左边返回指定长度的字符 right(char_expr,int_expr)  --返回字符串右边int_expr个字符 substring(expression,start,length) --截取字符串 datalength(Char_expr)  -

常用函数

字符串函数: concat ('xiao','qun'); =====>xiaoqun insert('woshixiaozou',10,3,'qun'); =====> woshixiaoqun select lower('XIAOQUN'),upper('xiaoqun'); =====> xiaoqun XIAOQUN select left('xiaoqunwoshi',7),right('xiaoqunwoshi',5); =====>xiaoqun woshi sele