百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

C#版OpenCv常用函数大全(01-50)(c#调用opencv库函数)

zhezhongyun 2025-04-06 00:27 5 浏览

OpenCvSharp 是 OpenCV 的NET封装,提供了丰富的图像处理和计算机视觉功能。以下是一些常用函数及其详细说明。

1. 图像读取与显示

Cv2.ImRead

  • 功能:读取图像文件并返回一个 Mat 对象。
  • 用法
  • Mat image = Cv2.ImRead("path/to/image.jpg");

Cv2.ImShow

  • 功能:在窗口中显示图像。
  • 用法
  • Cv2.ImShow("Window Name", image);

Cv2.WaitKey

  • 功能:等待键盘输入,通常用于暂停窗口。
  • 用法
  • Cv2.WaitKey(0); // 等待任意键

2. 图像处理

Cv2.CvtColor

  • 功能:转换图像颜色空间(如 BGR 转灰度、RGB 转 HSV 等)。
  • 用法
  • Mat grayImage = new Mat();
  • Cv2.CvtColor(image, grayImage, ColorConversion.BgrToGray);

Cv2.GaussianBlur

  • 功能:对图像应用高斯模糊,减少噪声。
  • 用法
  • Mat blurredImage = new Mat();
  • Cv2.GaussianBlur(image, blurredImage, new Size(5, 5), 0);

Cv2.Canny

  • 功能:使用 Canny 算法进行边缘检测。
  • 用法
  • Mat edges = new Mat();
  • Cv2.Canny(grayImage, edges, 100, 200);

3. 图像变换

Cv2.Resize

  • 功能:调整图像大小。
  • 用法
  • Mat resizedImage = new Mat();
  • Cv2.Resize(image, resizedImage, new Size(200, 200));

Cv2.Rotate

  • 功能:旋转图像。
  • 用法
  • Mat rotatedImage = new Mat();
  • Cv2.Rotate(image, rotatedImage, RotateFlags.Rotate90Clockwise);

Cv2.WarpAffine

  • 功能:对图像进行仿射变换。
  • 用法
  • Mat transformedImage = new Mat();
  • Mat M = Cv2.GetRotationMatrix2D(new Point2f(image.Width / 2, image.Height / 2), 45, 1);
  • Cv2.WarpAffine(image, M, image.Size(), transformedImage);

4. 形态学操作

Cv2.Erode

  • 功能:腐蚀操作,减少图像中的白色区域。
  • 用法
  • Mat erodedImage = new Mat(); Cv2.Erode(binaryImage, erodedImage, null, new Point(-1, -1), 1);

Cv2.Dilate

  • 功能:膨胀操作,增加图像中的白色区域。
  • 用法
  • Mat dilatedImage = new Mat(); Cv2.Dilate(binaryImage, dilatedImage, null, new Point(-1, -1), 1);

5. 特征检测与描述

Cv2.FindContours

  • 功能:查找图像中的轮廓。
  • 用法
  • Cv2.FindContours(binaryImage, out Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes.Tree, ContourApproximation.Simple);

Cv2.DrawContours

  • 功能:在图像上绘制轮廓。
  • 用法
  • Cv2.DrawContours(image, contours, -1, Scalar.Red, 2);

6. 物体检测与识别

CvDnn.ReadNetFromDarknet

  • 功能:从 Darknet 配置文件和权重文件加载 YOLO 模型。
  • 用法
  • var net = CvDnn.ReadNetFromDarknet("yolov4.cfg", "yolov4.weights");

CvDnn.BlobFromImage

  • 功能:将图像转换为网络输入格式的 blob。
  • 用法
  • var blob = CvDnn.BlobFromImage(image, 1 / 255.0, new Size(416, 416), new Scalar(0, 0, 0), true, false);

CvDnn.Forward

  • 功能:执行前向推理。
  • 用法
  • var output = net.Forward();

7. 其他实用函数

Cv2.PutText

  • 功能:在图像上绘制文本。
  • 用法
  • Cv2.PutText(image, "Hello, OpenCV!", new Point(10, 30), HersheyFonts.HersheySimplex, 1, Scalar.White, 2);

Cv2.Rectangle

  • 功能:在图像上绘制矩形。
  • 用法
  • Cv2.Rectangle(image, new Rect(50, 50, 100, 100), Scalar.Red, 2);

Cv2.Circle

  • 功能:在图像上绘制圆形。
  • 用法
  • Cv2.Circle(image, new Point(100, 100), 50, Scalar.Blue, 2);

8. 视频处理

Cv2.VideoCapture

  • 功能:打开视频文件或摄像头进行视频捕捉。
  • 用法
  • using (var capture = new VideoCapture(0)) // 0 表示默认摄像头
  • {
  • Mat frame = new Mat();
  • while (true)
  • {
  • capture.Read(frame);
  • if (frame.Empty()) break; Cv2.ImShow("Video", frame);
  • if (Cv2.WaitKey(30) >= 0) break; // 每帧延迟 30ms
  • }
  • }

Cv2.VideoWriter

  • 功能:将图像序列写入视频文件。
  • 用法
  • using (var writer = new VideoWriter("output.avi", FourCC.MJPG, 30, new Size(640, 480)))
  • { for (int i = 0; i < 100; i++)
  • {
  • Mat frame = new Mat(480, 640, MatType.CV_8UC3, new Scalar(0, 0, 255)); // 创建红色帧 writer.Write(frame);
  • }
  • }

9. 颜色空间转换

Cv2.Split

  • 功能:将多通道图像分离为单通道图像。
  • 用法
  • Mat[] channels = Cv2.Split(image); Mat blueChannel = channels[0]; // 蓝色通道
  • Mat greenChannel = channels[1]; // 绿色通道 Mat redChannel = channels[2]; // 红色通道

Cv2.Merge

  • 功能:将多个单通道图像合并为多通道图像。
  • 用法
  • Mat mergedImage = new Mat();
  • Cv2.Merge(channels, mergedImage);

10. 直方图处理

Cv2.CalcHist

  • 功能:计算图像的直方图。
  • 用法
  • int[] histSize = { 256 }; // 256 个 bins float[] ranges = { 0, 256 }; // 像素值范围
  • Mat hist = new Mat(); Cv2.CalcHist(new Mat[] { grayImage }, new int[] { 0 }, null, hist, 1, histSize, new Rangef[] { new Rangef(0, 256) });

Cv2.Normalize

  • 功能:归一化直方图。
  • 用法
  • Cv2.Normalize(hist, hist, 0, 255, NormTypes.MinMax);

11. 特征匹配

Cv2.DescribeKeypoints

  • 功能:描述关键点特征。
  • 用法
  • var orb = ORB.Create(); KeyPoint[] keypoints; Mat descriptors = new Mat(); orb.DetectAndCompute(image, null, out keypoints, descriptors);

Cv2.BFMatcher

  • 功能:使用暴力匹配器进行特征匹配。
  • 用法
  • var matcher = new BFMatcher(NormTypes.Hamming, crossCheck: true);
  • var matches = new Mat();
  • matcher.Match(descriptors1, descriptors2, matches);

12. 轮廓分析

Cv2.ApproxPolyDP

  • 功能:对轮廓进行多边形逼近。
  • 用法
  • Point[] approx = Cv2.ApproxPolyDP(contour, 0.02 * Cv2.ArcLength(contour, true), true);

Cv2.Hierarchy

  • 功能:获取轮廓的层次结构。
  • 用法
  • Cv2.FindContours(image, out Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes.Tree, ContourApproximation.Simple);

13. 机器学习与深度学习

CvDnn.ReadNetFromTensorflow

  • 功能:从 TensorFlow 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");

CvDnn.ReadNetFromCaffe

  • 功能:从 Caffe 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");

14. 其他实用功能

Cv2.GetRotationMatrix2D

  • 功能:获取旋转矩阵,用于图像旋转。
  • 用法
  • Mat M = Cv2.GetRotationMatrix2D(new Point2f(image.Width / 2, image.Height / 2), 45, 1);

Cv2.GetPerspectiveTransform

  • 功能:获取透视变换矩阵。
  • 用法
  • Point2f[] srcPoints = { new Point2f(0, 0), new Point2f(1, 0), new Point2f(0, 1) };
  • Point2f[] dstPoints = { new Point2f(0, 0), new Point2f(1, 0), new Point2f(0, 1) };
  • Mat perspectiveMatrix = Cv2.GetPerspectiveTransform(srcPoints, dstPoints);

15. 处理图像的 ROI(感兴趣区域)

Mat.RegionOfInterest

  • 功能:提取图像的感兴趣区域。
  • 用法
  • Mat roi = new Mat(image, new Rect(50, 50, 100, 100)); // 提取 (50, 50) 开始的 100x100 区域

16. 图像滤波

Cv2.MedianBlur

  • 功能:使用中值滤波去除图像噪声,特别适合去除椒盐噪声。
  • 用法
  • Mat medianBlurredImage = new Mat(); Cv2.MedianBlur(image, medianBlurredImage, 5); // 5 是滤波器大小

Cv2.BilateralFilter

  • 功能:双边滤波,能够在平滑图像的同时保留边缘。
  • 用法
  • Mat bilateralFilteredImage = new Mat();
  • Cv2.BilateralFilter(image, bilateralFilteredImage, 9, 75, 75);

17. 直方图均衡化

Cv2.EqualizeHist

  • 功能:对灰度图像进行直方图均衡化,增强对比度。
  • 用法
  • Mat equalizedImage = new Mat();
  • Cv2.EqualizeHist(grayImage, equalizedImage);

18. 轮廓特征提取

Cv2.Moments

  • 功能:计算轮廓的矩,用于特征提取。
  • 用法
  • var moments = Cv2.Moments(contour);
  • double area = moments.M00; // 轮廓面积

Cv2.MinEnclosingCircle

  • 功能:计算包围轮廓的最小圆。
  • 用法
  • Cv2.MinEnclosingCircle(contour, out Point2f center, out float radius);

19. 形状匹配

Cv2.MatchShapes

  • 功能:比较两个轮廓的形状,返回相似度。
  • 用法
  • double similarity = Cv2.MatchShapes(contour1, contour2, ShapeMatchModes.I1, 0);

20. 透视变换

Cv2.WarpPerspective

  • 功能:应用透视变换到图像。
  • 用法
  • Mat warpedImage = new Mat();
  • Mat perspectiveMatrix = Cv2.GetPerspectiveTransform(srcPoints, dstPoints);
  • Cv2.WarpPerspective(image, warpedImage, perspectiveMatrix, new Size(width, height));

21. 颜色空间转换

Cv2.CvtColor

  • 功能:转换图像颜色空间(如 BGR 转 HSV、RGB 转 LAB 等)。
  • 用法
  • Mat hsvImage = new Mat();
  • Cv2.CvtColor(image, hsvImage, ColorConversion.BgrToHsv);

22. 目标跟踪

Cv2.TrackerKCF

  • 功能:使用 KCF 算法进行目标跟踪。
  • 用法
  • var tracker = TrackerKCF.Create();
  • tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
  • tracker.Update(frame, out Rect boundingBox); // 更新跟踪

23. 关键点检测

Cv2.GoodFeaturesToTrack

  • 功能:检测图像中的角点。
  • 用法
  • Point2f[] corners = Cv2.GoodFeaturesToTrack(grayImage, maxCorners: 100, qualityLevel: 0.01, minDistance: 10);

24. 直方图反向投影

Cv2.CalcBackProject

  • 功能:计算反向投影,用于目标检测。
  • 用法
  • Mat backProject = new Mat();
  • Cv2.CalcBackProject(new Mat[] { image }, new int[] { 0 }, hist, backProject, new Rangef[] { new Rangef(0, 256) });

25. 颜色空间分离

Cv2.SeparateChannels

  • 功能:将多通道图像分离为单通道图像。
  • 用法
  • Mat[] channels = Cv2.SeparateChannels(image);

26. 直方图绘制

Cv2.DrawHist

  • 功能:绘制直方图。
  • 用法
  • // 需要自定义绘制函数
  • void DrawHist(Mat hist)
  • {
  • int histWidth = 512;
  • int histHeight = 400;
  • Mat histImage = new Mat(histHeight, histWidth, MatType.CV_8UC3, new Scalar(0, 0, 0));
  • int binWidth = (int)Math.Round((double)histWidth / hist.Rows);
  • for (int i = 1; i < hist.Rows; i++)
  • {
  • Cv2.Line(histImage, new Point(binWidth * (i - 1), histHeight - (int)hist.At<float>(i - 1)), new Point(binWidth * i, histHeight - (int)hist.At<float>(i)), new Scalar(255, 0, 0), 2);
  • }
  • Cv2.ImShow("Histogram", histImage);
  • }

27. 颜色直方图比较

Cv2.CompareHist

  • 功能:比较两个直方图。
  • 用法
  • double correlation = Cv2.CompareHist(hist1, hist2, HistCompMethods.Correl);

28. 目标检测与识别

CvDnn.ReadNetFromONNX

  • 功能:从 ONNX 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromONNX("model.onnx");

29. 轮廓填充

Cv2.FillPoly

  • 功能:填充多边形区域。
  • 用法
  • Cv2.FillPoly(image, new Point[][] { contour }, new Scalar(255, 0, 0));

30. 直方图均衡化

Cv2.EqualizeHist

  • 功能:对灰度图像进行直方图均衡化,增强对比度。
  • 用法
  • Mat equalizedImage = new Mat();
  • Cv2.EqualizeHist(grayImage, equalizedImage);

31. 颜色空间转换

Cv2.BGRToGray

  • 功能:将 BGR 图像转换为灰度图像。
  • 用法
  • Mat grayImage = new Mat();
  • Cv2.BGRToGray(image, grayImage);

Cv2.HsvToBgr

  • 功能:将 HSV 图像转换为 BGR 图像。
  • 用法
  • Mat bgrImage = new Mat();
  • Cv2.HsvToBgr(hsvImage, bgrImage);

32. 直方图均衡化

Cv2.CLAHE

  • 功能:对比度限制自适应直方图均衡化,增强图像对比度。
  • 用法
  • var clahe = Cv2.CreateCLAHE(clipLimit: 2.0, tileGridSize: new Size(8, 8));
  • Mat claheImage = new Mat();
  • clahe.Apply(grayImage, claheImage);

33. 目标检测与识别

CvDnn.NMSBoxes

  • 功能:非极大值抑制,用于去除重叠的边界框。
  • 用法
  • var indices = new List<int>();
  • CvDnn.NMSBoxes(boxes, confidences, scoreThreshold: 0.5f, nmsThreshold: 0.4f, indices);

34. 形态学操作

Cv2.MorphologyEx

  • 功能:执行形态学操作,如开运算、闭运算等。
  • 用法
  • Mat morphedImage = new Mat();
  • Cv2.MorphologyEx(binaryImage, morphedImage, MorphTypes.Open, null);

35. 目标跟踪

Cv2.TrackerCSRT

  • 功能:使用 CSRT 算法进行目标跟踪。
  • 用法
  • var tracker = TrackerCSRT.Create();
  • tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
  • tracker.Update(frame, out Rect boundingBox); // 更新跟踪

36. 关键点描述

Cv2.SIFT

  • 功能:使用 SIFT 算法检测和描述关键点。
  • 用法
  • var sift = SIFT.Create(); KeyPoint[] keypoints; Mat descriptors = new Mat();
  • sift.DetectAndCompute(image, null, out keypoints, descriptors);

37. 目标检测与识别

CvDnn.ReadNetFromTorch

  • 功能:从 Torch 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromTorch("model.t7");

38. 轮廓绘制

Cv2.DrawContours

  • 功能:在图像上绘制轮廓。
  • 用法
  • Cv2.DrawContours(image, contours, -1, Scalar.Red, 2);

39. 直方图计算

Cv2.CalcBackProject

  • 功能:计算反向投影,用于目标检测。
  • 用法
  • Mat backProject = new Mat();
  • Cv2.CalcBackProject(new Mat[] { image }, new int[] { 0 }, hist, backProject, new Rangef[] { new Rangef(0, 256) });

40. 目标检测与识别

CvDnn.ReadNetFromTensorflow

  • 功能:从 TensorFlow 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");

41. 目标检测与识别

CvDnn.ReadNetFromCaffe

  • 功能:从 Caffe 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");

42. 目标检测与识别

CvDnn.ReadNetFromONNX

  • 功能:从 ONNX 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromONNX("model.onnx");

43. 目标检测与识别

CvDnn.ReadNetFromDarknet

  • 功能:从 Darknet 配置文件和权重文件加载 YOLO 模型。
  • 用法
  • var net = CvDnn.ReadNetFromDarknet("yolov4.cfg", "yolov4.weights");

44. 目标检测与识别

CvDnn.BlobFromImage

  • 功能:将图像转换为网络输入格式的 blob。
  • 用法
  • var blob = CvDnn.BlobFromImage(image, 1 / 255.0, new Size(416, 416), new Scalar(0, 0, 0), true, false);

45. 目标检测与识别

CvDnn.Forward

  • 功能:执行前向推理。
  • 用法
  • var output = net.Forward();

46. 目标检测与识别

CvDnn.NMSBoxes

  • 功能:非极大值抑制,用于去除重叠的边界框。
  • 用法
  • var indices = new List<int>();
  • CvDnn.NMSBoxes(boxes, confidences, scoreThreshold: 0.5f, nmsThreshold: 0.4f, indices);

47. 目标检测与识别

CvDnn.ReadNetFromTorch

  • 功能:从 Torch 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromTorch("model.t7");

48. 目标检测与识别

CvDnn.ReadNetFromTensorflow

  • 功能:从 TensorFlow 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");

49. 目标检测与识别

CvDnn.ReadNetFromCaffe

  • 功能:从 Caffe 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");

50. 目标检测与识别

CvDnn.ReadNetFromONNX

  • 功能:从 ONNX 模型文件加载网络。
  • 用法
  • var net = CvDnn.ReadNetFromONNX("model.onnx");

相关推荐

字体缩放(方式一)(字体缩放150%怎么做)

通过元素宽度和字数计算得到缩放简单实现如下:/***字体最大为视觉要求大小(maxFontSize);超出缩小字体显示,最小为minFontSize;最小字体时超出部分使用圆点(...);*p...

网页世界隐藏的神秘代码语言,竟能这样改变布局

CSS基础:选择器与属性CSS(CascadingStyleSheets)是用于控制网页外观的一门样式表语言。它通过定义HTML元素的显示方式来增强网页的表现力。CSS的选择器允许开发者精确地定位...

CSS属性值计算过程详解(css属性用来定义元素计算)

在CSS中,即使某些属性没有显式声明,浏览器也会通过**属性值计算过程**为每个元素的所有属性赋予最终值。这一过程分为四个关键步骤,以下将逐一解析。1.确定声明值浏览器首先检查所有**直接应用**到...

软网推荐:找回调整Windows 10字号功能

之前的系统,从WindowsXP到早期版本的Windows10,均有字体大小调整功能,但从创意者版Windows10以来,取消了之前的设置选项,取而代之的是自定义缩放比例设置。使用这个功能调整过...

Excel中如何设置文本框属性,实例代码讲解

Excel不仅可以对数据进行处理,而且也可以图形化数据,直观显示数据表达的内容。本节介绍一个很重要的对象,Characters,字符对象,使用Characters对象可修改包含在全文本字符串中的任...

CSS 字体样式(css中字体)

本节我们来讲字体样式,之前我们学习HTML的时候学过一些用于字体加粗、倾斜的标签,但是使用标签来实现的效果肯定没有我们通过CSS中的样式来的方便。接下来我们会给大家介绍下面这几个属性的使用:通...

PC网站建设必备代码知识:HTML基础与应用技巧

在PC网站建设的相关课程里,代码扮演着至关重要的角色。只有熟练运用正确的代码,我们才能打造出功能完善、用户体验出色的PC网站。接下来,我会详细讲解在PC网站建设环节中必须了解的代码知识。HTML基础代...

让你大跌眼镜的疯狂 HTML 和 CSS 技巧

今天,分享一个让你大开眼界的技巧。通过使用这个技巧,你可以将整个网页变成一个CSS编辑器。没错,你从未见过这种方法。当我第一次尝试时,我完全被震惊到了。现在,让我们开始吧!步骤1首先,创建一个基础的...

jQuery EasyUI使用教程:创建一个链接按钮

jQueryEasyUI最新版下载>本教程主要为大家展示如何使用jQueryEasyUI创建一个链接按钮。通常情况下,使用“button/”元素来创建一个按钮;使用“a/”元素来创建链接按钮...

React 19 有哪些新特性?(react100)

如果你对React18还不熟悉,欢迎阅读之前的文章《React18全览[1]》最近React发布了V19RC版本,按照惯例,我们对React19的新特性进行一次深度的体验学习...

Java注解探秘:为什么@PostConstruct能解决你的初始化难题?

你是否在Spring项目中遇到过这样的困扰:明明依赖注入已经完成,但某些配置就是无法正常加载?手动调用初始化方法又容易引发空指针异常?这就是@PostConstruct注解大显身手的时候了!@Post...

AI驱动的表单自动填写(ai置入表格)

我们都同意,填写表格是一项枯燥且耗时的任务。如果我们可以创建一个可以为我们填写表格的AI助手,让我们将时间投入到更有建设性的任务中,那会怎样?AI助手将能够通过调用以表单字段为参数的函数来填写表...

从零到一:小程序设计新手如何快速上手?

开发环境搭建对于小程序设计新手而言,搭建合适的开发环境是首要任务。以小程序为例,其官方提供了功能强大的开发工具——开发者工具。首先,新手需前往官方开发者平台,在页面中找到“工具下载”板块,根据...

JavaSwingGUI从小白到大神-6(续)(java从小白到大牛怎么样)

接上一篇《JavaSwingGUI从小白到大神-6》,因本篇文章3万多字,头条一篇发不完,只能分开发。同事查询面板:CompanyFind.javapublicclassCompanyFind{...

C# winform界面假死(c#程序假死)

针对C#WinForm界面假死问题,以下是分步解决方案:1.使用异步编程(async/await)将耗时操作移至后台线程,保持UI线程响应。步骤:将事件处理函数标记为async。使用Task....