作者:手机用户2502907603 | 来源:互联网 | 2024-12-13 14:14
前言:本文旨在为使用EmguCV进行图像处理的开发者提供一个实用的函数汇总和解析指南,涵盖从基本操作到高级处理的各种功能。
1 // EmguCV常用函数解析:
2 // 加载图像
3 Mat img = new Mat("image_path", Emgu.CV.CvEnum.LoadImageType.Color);
4 // 创建灰度图像
5 Mat grayImg = new Mat("image_path", Emgu.CV.CvEnum.LoadImageType.Grayscale);
6 // 颜色空间转换,例如从BGR到灰度
7 Mat gray = new Mat();
8 CvInvoke.CvtColor(img, gray, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
9 // 二值化处理
10 CvInvoke.Threshold(gray, gray, 10, 255, Emgu.CV.CvEnum.ThresholdType.Binary);
11 // 提取图像子区域
12 Rectangle roi = new Rectangle(10, 10, 100, 100);
13 Mat subImg = img.ToImage().GetSubRect(roi).Mat;
14 // 图像类型转换
15 Image imgBgr = img.ToImage();
16 // 结构元素定义
17 Mat element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(5, 5));
18 // 形态学操作:膨胀
19 CvInvoke.Dilate(gray, gray, element);
20 // 形态学操作:腐蚀
21 CvInvoke.Erode(gray, gray, element);
22 // 轮廓检测
23 VectorOfVectorOfPoint cOntours= new VectorOfVectorOfPoint();
24 CvInvoke.FindContours(gray, contours, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
25 // 绘制轮廓
26 Mat cOntourImg= new Mat(img.Size, Emgu.CV.CvEnum.DepthType.Cv8U, 3, new MCvScalar(0, 0, 0));
27 CvInvoke.DrawContours(contourImg, contours, -1, new MCvScalar(0, 0, 255), 2);
28 // 颜色空间转换示例
29 Image hsvImg = imgBgr.Convert();
30 // 高斯模糊
31 CvInvoke.GaussianBlur(img, img, new Size(7, 7), 0);
32 // 自适应阈值处理
33 CvInvoke.AdaptiveThreshold(gray, gray, 255, Emgu.CV.CvEnum.AdaptiveThresholdType.MeanC, Emgu.CV.CvEnum.ThresholdType.Binary, 11, 2);
34 // 直方图计算
35 public static void CalculateHistogram(Mat img, out int[] histogram)
36 {
37 histogram = new int[256];
38 for (int i = 0; i 39 {
40 for (int j = 0; j 41 {
42 histogram[img.Data[i, j, 0]]++;
43 }
44 }
45 }