Emgucv使用中常用函数总结

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 MATCvInvoke.CvtColor(SCr, bw, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);//相当于二值化图 --黑白 根据大小10判断为0还是255CvInvoke.Threshold(bw,bw,10,255,Emgu.CV.CvEnum.ThresholdType.BinaryInv);//获取指定区域图片 SCr为mat类型Rectangle rectangle = new Rectangle(10,10,10,10);SCr = SCr.ToImage().GetSubRect(rectangle).Mat;//将Mat类型转换为Image类型Image Su = SCr.ToImage();Image Img = new Image(new Bitmap(""));//路径声明Image Sub = SCr.ToImage().GetSubRect(rectangle);//指定范围//指定参数获得结构元素Mat Struct_element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(3, 3), new Point(-1, -1));//膨胀CvInvoke.Dilate(bw, bw, Struct_element, new Point(1,1),3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));//腐蚀 当Struct_element模型创建不合理或者膨胀腐蚀次数较大时可能图像会发生偏移CvInvoke.Erode(bw, bw, Struct_element, new Point(-1, -1), 3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));//轮廓提取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().CopyBlank().Mat;//获取一张背景为黑色的图像, 大小与 scr 的大小一样, 类型为 Bgr。CvInvoke.DrawContours(mask, contours, -1, new MCvScalar(0, 0, 255));Image ycc_img = bgr_img.Convert();//把 bgr颜色图片转成ycbcr类型。Ycc min = new Ycc(152, 38, 118);//最小值的颜色。Ycc max = new Ycc(94, 43, 118);//最大值得颜色。Image result = ycc_img.InRange(min, max);//进行颜色提取。Image bgr_img = Ma.ToImage();//载入一张 Bgr 类型的图片。Bgr min = new Bgr(255, 255, 255);//白色的最小值, 允许一定154的误差。Bgr max = new Bgr(255, 255, 255);//白色的最大值, 允许一定的误差。Image result = bgr_img.InRange(min, max);//进行颜色提取。Image imageSource = new Image(SCr.Bitmap);Image imageHsv = imageSource.Convert();//将色彩空间从BGR转换到HSVImage[] 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(0, 0), new Point(res.Width, 0), new Point(res.Width, minAvg - Gets.Fges[1] + 52), new Point(0, minAvg - Gets.Fges[1] + 52) };VectorOfPoint vp = new VectorOfPoint(po);//CvInvoke.DrawContours(res, vp, -1, new MCvScalar(0, 0, 255));CvInvoke.FillConvexPoly(res,vp,new MCvScalar(0),LineType.EightConnected);//填充指定区域///

/// 灰度直方图计算 手动计算、/获取百分比的阀值 0.95/// public static void GetDenseHistogram95(ref int huidu, Mat ma){ DenseHistogram dense = new DenseHistogram(256, new RangeF(0, 255)); dense.Calculate(new Image[] { ma.ToImage() }, true, null); //计算直方图数据。 float[] data = dense.GetBinValues(); float[] data2 = dense.GetBinValues(); //获得直方图数据。 /*** 进行数据归一化到[0,256]区域内并且绘制直方图***/ float max = data[0]; //最大值 for (int j = 1; j < data.Length; j++) { if (data[j] > max) { max = data[j]; } } float Sum = data2.ToList().Sum(); float FloCount = 0; for (int k = 0; k < data.Length; k++) { data[k] = data[k] * 256 / max; FloCount += data2[k]; if (FloCount / Sum >= 0.95) { huidu = k; break; } }}//各种颜色空间 Hsv/Rgb/Hls/Xyz/Ycc/Graypublic static Image imageHsv=new Image(mat.Bitmap);public static Image Rgbimg = new Image(mat.Bitmap);public static Image Hlsimg = new Image(mat.Bitmap);public static Image Xyzimg = new Image(mat.Bitmap);public static Image Yccimg = new Image(mat.Bitmap);public static Image Grayimg = new Image(mat.Bitmap);Image[] imagesHsvs = imageHsv.Split();//分解成H、S、V三部分其他相同//高斯滤波实现CvInvoke.GaussianBlur(ma, ma, new Size(5, 5), 4);//形态学闭运算,先膨胀后腐蚀 Others.matWithPhi(by)自定义模型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));CvInvoke.MedianBlur(ma, ma, 5);//中值滤波实现CvInvoke.PutText(ma05, "G num: 1", new Point(10, 100), FontFace.HersheyComplex, 0.5, new MCvScalar(255)); //指定坐标(10, 100)显示文字,中文乱码,VectorOfPoint vp = new VectorOfPoint();CvInvoke.ConvexHull(pointof, vp);////查找最小外接矩形cvInpaintdouble dou = CvInvoke.ContourArea(vp, false); //计算面积VectorOfPoint vect = new VectorOfPoint();CvInvoke.FindNonZero(ma, vect); //获取非0的点Mat maSave1 = ma5.Clone();//备份 保留原有图片CvInvoke.AdaptiveThreshold(ma, mas, 255, AdaptiveThresholdType.GaussianC, Emgu.CV.CvEnum.ThresholdType.Binary, 3, 0);//查找最适合二值图

Copyright © 2088 世界杯欧洲预选赛_南非世界杯主题曲舞蹈 - lyzkxt.com All Rights Reserved.
友情链接