C#版OpenCv常用函数大全
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");
51. 颜色空间转换
Cv2.RGBToGray
- 功能:将 RGB 图像转换为灰度图像。
- 用法:
- Mat grayImage = new Mat();
- Cv2.CvtColor(image, grayImage, ColorConversion.RgbToGray);
Cv2.BGRToHSV
- 功能:将 BGR 图像转换为 HSV 图像。
- 用法:
- Mat hsvImage = new Mat();
- Cv2.CvtColor(image, hsvImage, ColorConversion.BgrToHsv);
52. 直方图计算与比较
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.CompareHist
- 功能:比较两个直方图。
- 用法:
- double correlation = Cv2.CompareHist(hist1, hist2, HistCompMethods.Correl);
53. 形态学操作
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);
54. 轮廓分析
Cv2.FindContours
- 功能:查找图像中的轮廓。
- 用法:
- Cv2.FindContours(binaryImage, out Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes.Tree, ContourApproximation.Simple);
55. 目标检测与识别
CvDnn.ReadNetFromDarknet
- 功能:从 Darknet 配置文件和权重文件加载 YOLO 模型。
- 用法:
- var net = CvDnn.ReadNetFromDarknet("yolov4.cfg", "yolov4.weights");
56. 目标检测与识别
CvDnn.ReadNetFromTensorflow
- 功能:从 TensorFlow 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");
57. 目标检测与识别
CvDnn.ReadNetFromCaffe
- 功能:从 Caffe 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");
58. 目标检测与识别
CvDnn.ReadNetFromONNX
- 功能:从 ONNX 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromONNX("model.onnx");
59. 目标检测与识别
CvDnn.NMSBoxes
- 功能:非极大值抑制,用于去除重叠的边界框。
- 用法:
- var indices = new List<int>();
- CvDnn.NMSBoxes(boxes, confidences, scoreThreshold: 0.5f, nmsThreshold: 0.4f, indices);
60. 目标跟踪
Cv2.TrackerKCF
- 功能:使用 KCF 算法进行目标跟踪。
- 用法:
- var tracker = TrackerKCF.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
61. 目标跟踪
Cv2.TrackerCSRT
- 功能:使用 CSRT 算法进行目标跟踪。
- 用法:
- var tracker = TrackerCSRT.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
62. 关键点检测与描述
Cv2.SIFT
- 功能:使用 SIFT 算法检测和描述关键点。
- 用法:
- var sift = SIFT.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- sift.DetectAndCompute(image, null, out keypoints, descriptors);
Cv2.ORB
- 功能:使用 ORB 算法检测和描述关键点。
- 用法:
- var orb = ORB.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- orb.DetectAndCompute(image, null, out keypoints, descriptors);
63. 直方图均衡化
Cv2.EqualizeHist
- 功能:对灰度图像进行直方图均衡化,增强对比度。
- 用法:
- Mat equalizedImage = new Mat();
- Cv2.EqualizeHist(grayImage, equalizedImage);
64. 目标检测与识别
CvDnn.ReadNetFromTorch
- 功能:从 Torch 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTorch("model.t7");
65. 轮廓绘制
Cv2.DrawContours
- 功能:在图像上绘制轮廓。
- 用法:
- Cv2.DrawContours(image, contours, -1, Scalar.Red, 2);
66. 目标检测与识别
CvDnn.ReadNetFromTensorflow
- 功能:从 TensorFlow 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");
67. 目标检测与识别
CvDnn.ReadNetFromCaffe
- 功能:从 Caffe 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");
68. 目标检测与识别
CvDnn.ReadNetFromONNX
- 功能:从 ONNX 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromONNX("model.onnx");
69. 目标检测与识别
CvDnn.NMSBoxes
- 功能:非极大值抑制,用于去除重叠的边界框。
- 用法:
- var indices = new List<int>();
- CvDnn.NMSBoxes(boxes, confidences, scoreThreshold: 0.5f, nmsThreshold: 0.4f, indices);
70. 目标跟踪
Cv2.TrackerKCF
- 功能:使用 KCF 算法进行目标跟踪。
- 用法:
- var tracker = TrackerKCF.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
71. 目标跟踪
Cv2.TrackerCSRT
- 功能:使用 CSRT 算法进行目标跟踪。
- 用法:
- var tracker = TrackerCSRT.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
72. 关键点检测与描述
Cv2.SIFT
- 功能:使用 SIFT 算法检测和描述关键点。
- 用法:
- var sift = SIFT.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- sift.DetectAndCompute(image, null, out keypoints, descriptors);
Cv2.ORB
- 功能:使用 ORB 算法检测和描述关键点。
- 用法:
- var orb = ORB.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- orb.DetectAndCompute(image, null, out keypoints, descriptors);
73. 直方图均衡化
Cv2.EqualizeHist
- 功能:对灰度图像进行直方图均衡化,增强对比度。
- 用法:
- Mat equalizedImage = new Mat();
- Cv2.EqualizeHist(grayImage, equalizedImage);
74. 目标检测与识别
CvDnn.ReadNetFromTorch
- 功能:从 Torch 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTorch("model.t7");
75. 轮廓绘制
Cv2.DrawContours
- 功能:在图像上绘制轮廓。
- 用法:
- Cv2.DrawContours(image, contours, -1, Scalar.Red, 2);
76. 图像金字塔
Cv2.PyrDown
- 功能:将图像缩小为原始图像的一半,使用高斯模糊。
- 用法:
- Mat downsampledImage = new Mat();
- Cv2.PyrDown(image, downsampledImage);
Cv2.PyrUp
- 功能:将图像放大为原始图像的两倍,使用高斯模糊。
- 用法:
- Mat upsampledImage = new Mat();
- Cv2.PyrUp(image, upsampledImage);
77. 透视变换
Cv2.GetAffineTransform
- 功能:获取仿射变换矩阵。
- 用法:
- 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 affineMatrix = Cv2.GetAffineTransform(srcPoints, dstPoints);
78. 直方图反向投影
Cv2.CalcBackProject
- 功能:计算反向投影,用于目标检测。
- 用法:
- Mat backProject = new Mat();
- Cv2.CalcBackProject(new Mat[] { image }, new int[] { 0 }, hist, backProject, new Rangef[] { new Rangef(0, 256) });
79. 轮廓特征提取
Cv2.Moments
- 功能:计算轮廓的矩,用于特征提取。
- 用法:
- var moments = Cv2.Moments(contour);
- double area = moments.M00; // 轮廓面积
80. 轮廓逼近
Cv2.ApproxPolyDP
- 功能:对轮廓进行多边形逼近。
- 用法:
- Point[] approx = Cv2.ApproxPolyDP(contour, 0.02 * Cv2.ArcLength(contour, true), true);
81. 形态学操作
Cv2.MorphologyEx
- 功能:执行形态学操作,如开运算、闭运算等。
- 用法:
- Mat morphedImage = new Mat();
- Cv2.MorphologyEx(binaryImage, morphedImage, MorphTypes.Open, null);
82. 颜色空间转换
Cv2.CvtColor
- 功能:转换图像颜色空间(如 BGR 转 HSV、RGB 转 LAB 等)。
- 用法:
- Mat hsvImage = new Mat();
- Cv2.CvtColor(image, hsvImage, ColorConversion.BgrToHsv);
83. 目标检测与识别
CvDnn.ReadNetFromDarknet
- 功能:从 Darknet 配置文件和权重文件加载 YOLO 模型。
- 用法:
- var net = CvDnn.ReadNetFromDarknet("yolov4.cfg", "yolov4.weights");
84. 目标检测与识别
CvDnn.ReadNetFromTensorflow
- 功能:从 TensorFlow 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");
85. 目标检测与识别
CvDnn.ReadNetFromCaffe
- 功能:从 Caffe 模型文件加载网络。
- 用法:
- csharp
- var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");
86. 目标检测与识别
CvDnn.ReadNetFromONNX
- 功能:从 ONNX 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromONNX("model.onnx");
87. 目标检测与识别
CvDnn.NMSBoxes
- 功能:非极大值抑制,用于去除重叠的边界框。
- 用法:
- var indices = new List<int>();
- CvDnn.NMSBoxes(boxes, confidences, scoreThreshold: 0.5f, nmsThreshold: 0.4f, indices);
88. 目标跟踪
Cv2.TrackerKCF
- 功能:使用 KCF 算法进行目标跟踪。
- 用法:
- var tracker = TrackerKCF.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
89. 目标跟踪
Cv2.TrackerCSRT
- 功能:使用 CSRT 算法进行目标跟踪。
- 用法:
- var tracker = TrackerCSRT.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
90. 关键点检测与描述
Cv2.SIFT
- 功能:使用 SIFT 算法检测和描述关键点。
- 用法:
- var sift = SIFT.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- sift.DetectAndCompute(image, null, out keypoints, descriptors);
Cv2.ORB
- 功能:使用 ORB 算法检测和描述关键点。
- 用法:
- var orb = ORB.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- orb.DetectAndCompute(image, null, out keypoints, descriptors);
91. 直方图均衡化
Cv2.EqualizeHist
- 功能:对灰度图像进行直方图均衡化,增强对比度。
- 用法:
- Mat equalizedImage = new Mat();
- Cv2.EqualizeHist(grayImage, equalizedImage);
92. 轮廓绘制
Cv2.DrawContours
- 功能:在图像上绘制轮廓。
- 用法:
- Cv2.DrawContours(image, contours, -1, Scalar.Red, 2);
93. 目标检测与识别
CvDnn.ReadNetFromTorch
- 功能:从 Torch 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTorch("model.t7");
94. 目标检测与识别
CvDnn.ReadNetFromTensorflow
- 功能:从 TensorFlow 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromTensorflow("model.pb", "model.pbtxt");
95. 目标检测与识别
CvDnn.ReadNetFromCaffe
- 功能:从 Caffe 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromCaffe("deploy.prototxt", "model.caffemodel");
96. 目标检测与识别
CvDnn.ReadNetFromONNX
- 功能:从 ONNX 模型文件加载网络。
- 用法:
- var net = CvDnn.ReadNetFromONNX("model.onnx");
97. 目标检测与识别
CvDnn.NMSBoxes
- 功能:非极大值抑制,用于去除重叠的边界框。
- 用法:
- var indices = new List<int>();
- CvDnn.NMSBoxes(boxes, confidences, scoreThreshold: 0.5f, nmsThreshold: 0.4f, indices);
98. 目标跟踪
Cv2.TrackerKCF
- 功能:使用 KCF 算法进行目标跟踪。
- 用法:
- var tracker = TrackerKCF.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
99. 目标跟踪
Cv2.TrackerCSRT
- 功能:使用 CSRT 算法进行目标跟踪。
- 用法:
- var tracker = TrackerCSRT.Create();
- tracker.Init(frame, new Rect(100, 100, 50, 50)); // 初始化跟踪器
- tracker.Update(frame, out Rect boundingBox); // 更新跟踪
100. 关键点检测与描述
Cv2.SIFT
- 功能:使用 SIFT 算法检测和描述关键点。
- 用法:
- var sift = SIFT.Create(); KeyPoint[] keypoints;
- Mat descriptors = new Mat();
- sift.DetectAndCompute(image, null, out keypoints, descriptors);
相关文章:

C#版OpenCv常用函数大全
OpenCvSharp 是 OpenCV 的NET封装,提供了丰富的图像处理和计算机视觉功能。以下是一些常用函数及其详细说明。 1. 图像读取与显示 Cv2.ImRead 功能:读取图像文件并返回一个 Mat 对象。用法:Mat image Cv2.ImRead("path/to/image.jpg&…...

Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别
Spring Boot – CrudRepository 和 JpaRepository 之间的区别 Spring Boot建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员…...

蓝桥杯备考:数据结构之栈 和 stack
栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素 出栈:删除元素 栈本身就是一个线性表,我们可以写一个足够大的数组来实现栈 除此之外,我们还需要变量n来记录…...
solidity基础 -- 映射
在区块链的智能合约开发领域,Solidity 作为以太坊上最主流的编程语言之一,拥有诸多强大特性助力开发者构建复杂且高效的去中心化应用。其中,映射(Mapping)是一个极为关键的数据结构,它为合约中的数据存储与…...

Angular 11课程实践:构建高效单页应用的支持代码
本文还有配套的精品资源,点击获取 简介:Angular 11是Google支持的前端框架,适合构建复杂的单页应用(SPA)。本课程将深入介绍Angular核心特性,如组件化、依赖注入、数据绑定和路由,并且涵盖Ang…...

测试用例颗粒度说明
当我们在编写测试用例时,总是会遇到一个问题:如何确定测试用例的颗粒度?测试用例过于粗糙,可能无法全面覆盖系统的细节;而颗粒度过细,又会导致测试重复、冗余。掌握合适的颗粒度,不仅可以提高测…...

ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告
问题背景: ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告: 解决办法: 在工程里面的.vscode文件夹下,检查是否存在c_cpp_properties.json文件,如果没有可以手动创建添加。如图…...

Windows安装ES单机版设置密码
下载ES ES下载链接 我用的是7.17.26 启动前配置 解压之后打开D:\software\elasticsearch-7.17.26\bin\elasticsearch-env.bat 在elasticsearch-env.bat文件中修改jdk的路径 修改前 修改内容 if defined ES_JAVA_HOME (set JAVA"D:\software\elasticsearch-7.17.26\…...
Linux Docker
Docker 的定义 Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个可移植的容器。容器是一种轻量级、独立的运行环境,与传统的虚拟机不同,容器共享主机操作系统的内核,通过隔离的文件系统、进程空间和网…...

MSE学习
MSE简介 媒体源拓展(Media Source Extensions,简称 MSE)是一个由 W3C 制定的标准,它允许 JavaScript 代码通过 AJAX 请求获取媒体数据,并将其提供给 HTML 的 <video> 或 <audio> 元素进行播放。 MSE特点…...

0-基于蚁群优化和带注意力机制的循环神经网络的新型混合算法用于解决旅行商问题(HAL science)(完)
文章目录 AbstractI INTRODUCTIONII 旅行商问题的正式描述III STATE OF THE ARTIV 使用的混合化技术原理4.1 Principle of ACO4.2具有注意机制的自动编码器模型V 蚁群优化与具有注意机制的神经网络的混合5.1 基本思想5.2 解决步骤5.2.1 模型训练5.2.2 寻找解VI EXPERIMENTS6.1 …...

MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法
5G网速虽快,手机功耗也大。 1.取消MIUI强制的5G,手动设置4G的方法! 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后,被强制连5G,手动设置开关被隐藏,如下图: 1…...

挑战20天刷完leecode100
2025.1.5 二分查找 1 搜索插入位置 就是简单的二分查找 注意开闭就行 这里有一句话就是nums是升序的 如果他不是严格递增 就是有相同的数字的情况下应该怎么写? int lower_bound(vector<int>& nums, int target) {int left 0, right (int) nums.size() - 1; …...
Java列表示例
示例1:使用ArrayList创建并操作列表 ArrayList是List接口最常用的实现之一,它内部使用数组来存储元素,因此对于随机访问具有很高的效率。但是,当涉及到频繁的插入或删除操作时,它的性能可能会受到影响,因为…...
Objective-C语言的网络编程
Objective-C语言的网络编程 引言 在现代软件开发中,网络编程逐渐成为一个不可或缺的部分,特别是在移动应用和分布式系统中。Objective-C 是一种主要用于 iOS 和 macOS 开发的编程语言,它在网络编程方面也有着丰富的支持。在这篇文章中&…...
安卓OCR使用(Google ML Kit)
OCR是一个很常用的功能,Google ML Kit提供了OCR能力,用起来也很简单,本文介绍一下使用方法。 1. 相关概念 名词概念解释TextBlock块一个段落Line行一行文本Element元素单词;对汉字来说,类似"开头 (分隔符)中间&…...

《机器学习》——贝叶斯算法
贝叶斯简介 贝叶斯公式,又称贝叶斯定理、贝叶斯法则,最初是用来描述两个事件的条件概率间的关系的公式,后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是,支持某项属性的事件发生得愈多,则该属性成…...

【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率
🍬引言 🍬什么是低代码平台? 低代码平台(Low-Code Platform)是一种使开发人员和业务用户可以通过图形化界面和少量的编程来创建应用程序的开发工具。与传统的编程方式相比,低代码平台大大简化了开发过程&a…...
网站自动签到
我研究生生涯面临两个问题,一是写毕业论文,二是找工作,这两者又有很大的冲突。怎么解决这两个冲突呢?把python学好是一个路子,因此从今天我要开一个专栏就是学python 其实我的本意不是网站签到,我喜欢在起点…...

C 语言奇幻之旅 - 第16篇:C 语言项目实战
目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...