C#版OpenCv常用函数大全(01-50)
bigegpt 2025-01-15 10:57 7 浏览
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");
相关推荐
- 10w qps缓存数据库——Redis(redis缓存调优)
-
一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...
- Redis系列专题4--Redis配置参数详解
-
本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....
- 开源一夏 | 23 张图,4500 字从入门到精通解释 Redis
-
redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...
- redis的简单与集群搭建(redis建立集群)
-
Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...
- 推荐几个好用Redis图形化客户端工具
-
RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...
- 关于Redis在windows上运行及fork函数问题
-
Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...
- 你必须懂的Redis十大应用场景(redis常见应用场景)
-
Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...
- 极简Redis配置(redis的配置)
-
一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...
- 什么是redis,怎么启动及如何压测
-
从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...
- 一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI
-
介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....
- windows系统的服务器快速部署java项目环境地址
-
1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...
- window11 下 redis 下载与安装(windows安装redis客户端)
-
#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...
- 一款轻量级的Redis客户端工具,贼好用!
-
使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...
- 一个.NET开发且功能强大的Windows远程控制系统
-
我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...
- Redis客户端工具详解(4款主流工具)
-
大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- skip-name-resolve (63)
- linuxlink (65)
- pythonwget (67)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)