专栏地址:
《 OpenCV功能使用详解200篇 》
《 OpenCV算子使用详解300篇 》
《 Halcon算子使用详解300篇 》
内容持续更新 ,欢迎点击订阅
OpenCVSharp 是 OpenCV 的 .NET 封装,几乎涵盖了 OpenCV 的所有功能。OpenCV 本身包含了大量的模块(或称子模块),每个模块都包含了不同的算子和功能。下面是 OpenCVSharp 中所有模块的详细列举,并描述了各模块中常见的算子(函数)。此回答力求全面,涵盖主要的模块和算子。
1. Core 模块 (core
)
该模块是 OpenCV 的基础,包含了矩阵、数据结构、基本运算和矩阵处理功能。
常用算子:
Cv2.Add()
,Cv2.Subtract()
,Cv2.Multiply()
,Cv2.Divide()
Cv2.Min()
,Cv2.Max()
,Cv2.Mean()
,Cv2.Median()
Cv2.AbsDiff()
,Cv2.BitwiseAnd()
,Cv2.BitwiseOr()
,Cv2.BitwiseXor()
,Cv2.BitwiseNot()
Cv2.Normalize()
,Cv2.NormalizeSum()
Cv2.ElemSize()
,Cv2.Total()
,Cv2.MatType()
Cv2.Mat()
,Cv2.MatOfInt()
,Cv2.MatOfFloat()
Cv2.Concat()
,Cv2.Split()
,Cv2.Merge()
Cv2.Sort()
,Cv2.Randu()
,Cv2.Randn()
Cv2.Multiply()
,Cv2.AbsDiff()
Cv2.MatExpr()
Cv2.MeanStdDev()
Cv2.CornerSubPix()
Cv2.Rect()
,Cv2.Size()
,Cv2.Point()
2. Image Processing 模块 (imgproc
)
图像处理模块用于处理图像的转换、滤波、几何变换等。
常用算子:
- 颜色空间转换:
Cv2.CvtColor()
Cv2.BGR2GRAY
,Cv2.GRAY2BGR
,Cv2.RGB2HSV
等
- 几何变换:
Cv2.Resize()
,Cv2.PyrDown()
,Cv2.PyrUp()
Cv2.GetAffineTransform()
,Cv2.GetPerspectiveTransform()
Cv2.WarpAffine()
,Cv2.WarpPerspective()
- 滤波操作:
Cv2.GaussianBlur()
,Cv2.MedianBlur()
,Cv2.BilateralFilter()
Cv2.Sobel()
,Cv2.Laplacian()
,Cv2.Canny()
,Cv2.Scharr()
- 形态学操作:
Cv2.Erode()
,Cv2.Dilate()
,Cv2.MorphologyEx()
- 阈值操作:
Cv2.Threshold()
,Cv2.AdaptiveThreshold()
Cv2.InRange()
- 边缘检测:
Cv2.Canny()
,Cv2.HoughLines()
,Cv2.HoughCircles()
- 轮廓处理:
Cv2.FindContours()
,Cv2.DrawContours()
,Cv2.ApproxPolyDP()
- 角点检测:
Cv2.GoodFeaturesToTrack()
,Cv2.CornerHarris()
- 直方图计算:
Cv2.CalcHist()
,Cv2.NormalizeHist()
- 模板匹配:
Cv2.MatchTemplate()
,Cv2.MinMaxLoc()
- 均值滤波与高斯滤波:
Cv2.BoxFilter()
,Cv2.Blur()
3. Features2D 模块 (features2d
)
用于处理特征点检测与匹配,包括常见的特征提取和匹配算法,如 ORB、SIFT、SURF 等。
常用算子:
- 特征检测与描述符计算:
Cv2.ORB_Create()
,Cv2.SIFT_Create()
,Cv2.SURF_Create()
Cv2.FastFeatureDetector_Create()
,Cv2.AKAZE_Create()
Cv2.BRIEF()
,Cv2.BRISK()
Cv2.FAST()
- 特征匹配:
Cv2.BFMatcher()
,Cv2.FlannBasedMatcher()
Cv2.DescriptorMatcher()
,Cv2.BowImgDescriptorExtractor()
Cv2.Matches()
(KNN 或 Brute Force Matcher)
- 绘制特征点:
Cv2.DrawKeypoints()
,Cv2.DrawMatches()
4. Video 模块 (video
)
该模块用于视频分析,包括光流估计、背景分割和对象追踪等。
常用算子:
- 光流估计:
Cv2.CalcOpticalFlowFarneback()
,Cv2.calcOpticalFlowPyrLK()
- 背景建模:
Cv2.BackgroundSubtractorMOG2()
,Cv2.BackgroundSubtractorKNN()
- 视频读取与写入:
Cv2.VideoCapture()
,Cv2.VideoWriter()
- 视频跟踪:
Cv2.TrackerMOSSE_Create()
,Cv2.TrackerKCF_Create()
Cv2.CamShift()
,Cv2.meanShift()
5. Machine Learning 模块 (ml
)
该模块提供了机器学习算法的实现,包括分类器、回归分析、聚类等。
常用算子:
- SVM:
Cv2.ml.SVM_Create()
Cv2.ml.SVM_Train()
,Cv2.ml.SVM_Predict()
- K近邻:
Cv2.ml.KNearest_Create()
Cv2.ml.KNearest_FindNearest()
- 决策树:
Cv2.ml.DecisionTree_Create()
- 随机森林:
Cv2.ml.RTrees_Create()
- 神经网络:
Cv2.ml.ANN_MLP_Create()
- Boosting:
Cv2.ml.Boost_Create()
- 聚类算法:
Cv2.ml.KMeans()
,Cv2.ml.EM_Create()
- Logistic回归:
Cv2.ml.LogisticRegression_Create()
6. Object Detection 模块 (objdetect
)
该模块用于物体检测,如人脸检测、行人检测、眼睛检测等。
常用算子:
- 人脸检测:
Cv2.CascadeClassifier()
Cv2.CascadeClassifier_DetectMultiScale()
- 行人检测:
Cv2.HOGDescriptor()
Cv2.HOGDescriptor_DetectMultiScale()
- Hough变换:
Cv2.HoughLines()
,Cv2.HoughCircles()
7. Calibration and 3D Reconstruction 模块 (calib3d
)
该模块涉及相机标定、三维重建和相机姿态估计等。
常用算子:
- 相机标定:
Cv2.CalibrateCamera()
Cv2.StereoCalibrate()
,Cv2.StereoRectify()
- 投影与重建:
Cv2.ProjectPoints()
,Cv2.ReprojectImageTo3D()
Cv2.FindHomography()
- 深度图与视差图:
Cv2.StereoBMCreate()
,Cv2.StereoSGBMCreate()
- 相机坐标系与世界坐标系转换:
Cv2.Rodrigues()
8. Deep Neural Networks 模块 (dnn
)
该模块用于加载和使用深度学习模型。
常用算子:
- 模型加载:
Cv2.dnn.ReadNet()
,Cv2.dnn.ReadNetFromTensorflow()
,Cv2.dnn.ReadNetFromCaffe()
Cv2.dnn.ReadNetFromDarknet()
- 图像预处理:
Cv2.dnn.BlobFromImage()
Cv2.dnn.BlobFromImages()
- 模型推理:
Cv2.dnn.Forward()
Cv2.dnn.SetInput()
- 层获取与网络设置:
Cv2.dnn.GetLayerNames()
,Cv2.dnn.GetUnconnectedOutLayers()
9. HighGUI 模块 (highgui
)
highgui
是 OpenCV 用来处理图形用户界面(GUI)和显示图像、视频的模块。它提供了与窗口、鼠标和键盘交互的接口。这个模块在图像处理的过程中非常常用,尤其是用来显示处理结果。
常用算子:
-
窗口管理:
Cv2.NamedWindow()
: 创建一个窗口。Cv2.DestroyWindow()
: 销毁指定的窗口。Cv2.DestroyAllWindows()
: 销毁所有窗口。Cv2.ResizeWindow()
: 改变窗口大小。Cv2.MoveWindow()
: 移动窗口到指定位置。Cv2.GetWindowProperty()
: 获取窗口属性。
-
图像显示与等待:
Cv2.ImShow()
: 显示图像在指定的窗口中。Cv2.WaitKey()
: 等待键盘输入,通常与图像显示配合使用,用于暂停程序的执行,直到用户按下某个键。Cv2.ImWrite()
: 将图像保存到指定路径。
-
鼠标回调:
Cv2.SetMouseCallback()
: 设置鼠标事件回调函数,处理鼠标点击、拖动等事件。
10. Imgcodecs 模块 (imgcodecs
)
imgcodecs
模块负责图像的编码和解码,通常用来读取和保存图像。它可以处理多种图像格式,如 .jpg
、.png
、.bmp
、.tiff
等。
常用算子:
-
图像读取与保存:
Cv2.ImRead()
: 读取图像文件并将其加载到内存中,支持各种格式。Cv2.ImWrite()
: 将图像保存为指定文件格式。
-
图像读取的标志位:
Cv2.ImReadModes.Grayscale
: 以灰度模式读取图像。Cv2.ImReadModes.Color
: 以彩色模式读取图像。Cv2.ImReadModes.Unchanged
: 不做任何解码,直接加载原始图像数据。
-
图像编码参数:
Cv2.ImEncode()
: 将图像数据压缩成指定格式的字节流。Cv2.ImDecode()
: 将字节流解码成图像。
11. Flann (Fast Library for Approximate Nearest Neighbors) 模块 (flann
)
Flann 模块提供了高效的近似最近邻搜索算法,通常用于特征匹配、数据挖掘和搜索引擎等应用。它提供了多种高效的算法来进行快速的最近邻查询。
常用算子:
-
FLANN匹配器:
Cv2.FlannBasedMatcher()
: 创建一个 FLANN 匹配器,适用于描述符匹配(如 SURF、SIFT)。Cv2.FlannBasedMatcher.KnnMatch()
: 使用 K 近邻算法进行描述符匹配。
-
FLANN搜索参数:
Cv2.FlannBasedMatcher.Parameters()
: 设置 FLANN 搜索参数(例如:checks
,用于控制近似搜索的精度与速度)。
12. Contrib 模块 (contrib
)
contrib
是 OpenCV 的扩展模块,包含了一些实验性或非标准的算法和工具。这个模块并非 OpenCV 核心的一部分,但它提供了许多有用的工具,特别是一些较为先进的计算机视觉算法和功能。
常用算子:
-
Deep Learning 模块:
- OpenCV 提供了许多深度学习相关的工具,如集成 TensorFlow、Caffe、Torch 等框架的预训练模型,进行目标检测、分类等任务。
-
增强现实 (AR):
Cv2.AugmentedReality()
: 用于增强现实应用中的图像注册和匹配。
-
Extra Feature Detectors:
- LSD (Line Segment Detector):
Cv2.LSDDetector()
- SimpleBlobDetector:
Cv2.SimpleBlobDetector()
- LSD (Line Segment Detector):
-
OCR (Optical Character Recognition):
- 集成 Tesseract OCR 引擎,通过 OpenCV 处理文本提取,
Cv2.Text()
。
- 集成 Tesseract OCR 引擎,通过 OpenCV 处理文本提取,
13. Text 模块 (text
)
OpenCV 的 text
模块专门用于文本检测与识别。它通常与 OCR 相关联,常用于图像中的文本提取与分析。
常用算子:
-
文本检测:
Cv2.Text.DetectText()
: 检测图像中的文本区域。
-
文本提取:
Cv2.Text.RecognizeText()
: 从检测出的文本区域提取文本。
-
OCR 使用:
- 与
Tesseract
引擎集成,提供一个简单的接口来识别图片中的文字。
- 与
14. Tracking 模块 (tracking
)
OpenCV 中的 tracking
模块用于视频中的物体跟踪。它提供了多种对象跟踪算法,这些算法可以通过视频序列来追踪物体的运动。
常用算子:
-
KCF (Kernelized Correlation Filters):
Cv2.TrackerKCF_create()
: 创建一个 KCF 跟踪器。
-
MOSSE (Minimum Output Sum of Squared Error):
Cv2.TrackerMOSSE_create()
: 创建一个 MOSSE 跟踪器。
-
BOOSTING, MIL, TLD 等其他跟踪算法:
Cv2.TrackerBoosting_create()
,Cv2.TrackerMIL_create()
,Cv2.TrackerTLD_create()
等。
-
更新和获取位置:
Cv2.Tracker.Update()
: 更新跟踪器的状态。Cv2.Tracker.GetPosition()
: 获取当前跟踪目标的位置。
15. Stereo Vision 模块 (stereo
)
该模块处理立体视觉和深度图的计算,常用于三维重建、立体匹配和深度估计。
常用算子:
-
立体匹配:
Cv2.StereoBM_create()
: 创建一个基于块匹配的立体匹配算法。Cv2.StereoSGBM_create()
: 创建一个基于加权立体图像块匹配的算法,通常用于更精细的深度图生成。
-
深度图生成:
Cv2.StereoBM.compute()
: 计算左右图像对的深度图。Cv2.StereoSGBM.compute()
: 基于 SGBM 算法计算深度图。
-
视差图:
Cv2.ReprojectImageTo3D()
: 将视差图转为三维坐标。
16. Photo 模块 (photo
)
photo
模块提供了图像修复和增强的功能,常用于图像的去噪、颜色校正、曝光合成等。
常用算子:
-
去噪:
Cv2.FastNlMeansDenoising()
,Cv2.FastNlMeansDenoisingColored()
: 快速非局部均值去噪。
-
图像融合与曝光合成:
Cv2.CreateMergeDebevec()
: 使用 Debevec 算法合成曝光。Cv2.CreateMergeMertens()
: 使用 Mertens 算法进行多曝光合成。
-
光照校正:
Cv2.CorrectLighting()
:进行光照校正。
总结
OpenCVSharp 和 OpenCV 提供了广泛的图像处理功能和算法,涵盖了从基本的图像操作到复杂的计算机视觉任务的所有内容。从图像的读取、处理、显示,到特征提取、物体检测、机器学习、深度学习等高级应用,都有丰富的实现。这些功能帮助开发者在图像和视频分析、增强现实、自动驾驶、医学图像处理、安防监控等领域中进行高效的开发。
每个模块和算子都可以根据具体的应用需求进行组合和优化,从而实现各种强大的功能。希望这个详细的介绍对你理解 OpenCVSharp 和 OpenCV 的模块及功能有所帮助!