OpenCV 基本模块
OpenCV 是一个功能强大的计算机视觉库,包含多个模块,每个模块专注于不同的任务。以下是 OpenCV 中一些核心模块:
模块名称 | 主要功能 | 常用类/函数 |
---|---|---|
Core | 提供基本数据结构和函数,如图像存储、矩阵操作、文件 I/O 等。 | Mat , Point , Size , Rect , Scalar , FileStorage , cv::format |
Imgproc | 图像处理功能,包括滤波、几何变换、颜色空间转换、边缘检测、形态学操作、阈值化等。 | cvtColor , GaussianBlur , Canny , threshold , resize , warpAffine |
Highgui | 图像和视频的显示、窗口管理、用户交互(如鼠标事件、滑动条)。 | imshow , namedWindow , waitKey , createTrackbar , setMouseCallback |
Video | 视频处理功能,包括视频捕获、背景减除、光流计算等。 | VideoCapture , VideoWriter , BackgroundSubtractor , calcOpticalFlowPyrLK |
Calib3d | 相机标定、3D 重建、姿态估计等。 | findChessboardCorners , calibrateCamera , solvePnP , recoverPose |
Features2d | 特征检测与描述,包括关键点检测、特征匹配等。 | ORB , SIFT , SURF , BFMatcher , FlannBasedMatcher |
Objdetect | 目标检测功能,如 Haar 级联检测、HOG 检测等。 | CascadeClassifier , HOGDescriptor |
DNN | 深度学习模型的加载和推理,支持 TensorFlow、PyTorch、Caffe 等框架。 | readNet , blobFromImage , Net::forward |
ML | 机器学习算法,如 KNN、SVM、决策树等。 | KNearest , SVM , DTrees , TrainData |
Flann | 快速近似最近邻搜索(FLANN),用于特征匹配和高维数据搜索。 | Index , KDTreeIndexParams , SearchParams |
Photo | 图像修复、去噪、HDR 成像等。 | inpaint , fastNlMeansDenoising , createTonemap |
Stitching | 图像拼接功能,用于创建全景图。 | Stitcher , Stitcher::create |
Shape | 形状分析和匹配。 | ShapeDistanceExtractor , ShapeContextDistanceExtractor |
Tracking | 目标跟踪算法,如 MIL、KCF、GOTURN 等。 | TrackerMIL , TrackerKCF , TrackerGOTURN |
Videoio | 视频输入输出功能,支持多种视频格式和摄像头。 | VideoCapture , VideoWriter , CAP_PROP_FRAME_WIDTH , CAP_PROP_FRAME_HEIGHT |
Imgcodecs | 图像文件的读取和保存,支持多种图像格式。 | imread , imwrite , imdecode , imencode |
Xfeatures2d | 额外的特征检测与描述算法,如 SIFT、SURF、FREAK 等。 | SIFT , SURF , FREAK , DAISY |
Superres | 超分辨率图像处理。 | SuperResolution , DenseOpticalFlowExt |
Optflow | 光流计算和运动分析。 | calcOpticalFlowFarneback , calcOpticalFlowPyrLK |
Cuda | 利用 GPU 加速的计算机视觉算法。 | cuda::GpuMat , cuda::Stream , cuda::resize |
Contrib | 社区贡献的额外功能,如人脸识别、文本检测等。 | FaceRecognizer , TextDetector |
1. Core模块
core
模块是 OpenCV 的核心模块,提供了基本的数据结构和函数。
主要功能
基本数据结构:
Mat
:用于存储图像和矩阵数据。Point
、Size
、Rect
:用于表示点、尺寸和矩形区域。Scalar
:用于表示颜色或像素值。
矩阵操作:
矩阵的创建、复制、转换、算术运算等。
文件 I/O:
读取和保存图像、视频、XML/YAML 文件等。
内存管理:
自动内存管理,支持引用计数。
实例
#include <opencv2/core.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {// 创建一个 3x3 的矩阵Mat mat = (Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);// 输出矩阵cout << "Matrix:\n" << mat << endl;// 访问矩阵元素int value = mat.at<int>(1, 1);cout << "Value at (1, 1): " << value << endl;return 0;
}
2. Imgproc 模块
imgproc
模块提供了图像处理功能,包括滤波、几何变换、颜色空间转换等。
主要功能
图像滤波:
均值滤波、高斯滤波、中值滤波等。
几何变换:
缩放、旋转、仿射变换、透视变换等。
颜色空间转换:
RGB 到灰度、HSV、Lab 等颜色空间的转换。
边缘检测:
Canny、Sobel、Laplacian 等边缘检测算法。
形态学操作:
腐蚀、膨胀、开运算、闭运算等。
阈值化:
简单阈值化、自适应阈值化等。
实例
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>using namespace cv;int main() {// 读取图像Mat image = imread("test.jpg");if (image.empty()) return -1;// 转换为灰度图像Mat grayImage;cvtColor(image, grayImage, COLOR_BGR2GRAY);// 高斯滤波Mat blurredImage;GaussianBlur(grayImage, blurredImage, Size(5, 5), 0);// 显示结果imshow("Original Image", image);imshow("Blurred Image", blurredImage);waitKey(0);return 0;
}
3. Highgui 模块
highgui
模块提供了图像和视频的显示、窗口管理以及用户交互功能。
主要功能
图像显示:
创建窗口、显示图像、等待用户输入。
视频捕获:
从摄像头或视频文件中读取帧。
用户交互:
鼠标事件、滑动条、按钮等。
实例
#include <opencv2/highgui.hpp>using namespace cv;int main() {// 读取图像Mat image = imread("test.jpg");if (image.empty()) return -1;// 创建窗口并显示图像namedWindow("Display Window", WINDOW_AUTOSIZE);imshow("Display Window", image);// 等待用户按键waitKey(0);// 关闭窗口destroyAllWindows();return 0;
}
4. Video 模块
video
模块提供了视频处理功能,包括视频捕获、背景减除、光流计算等。
主要功能
视频捕获:
从摄像头或视频文件中读取帧。
背景减除:
提取视频中的前景对象。
光流计算:
计算图像中物体的运动。
实例
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>using namespace cv;int main() {// 打开摄像头VideoCapture cap(0);if (!cap.isOpened()) return -1;Mat frame;while (true) {// 读取一帧cap >> frame;if (frame.empty()) break;// 显示帧imshow("Camera Feed", frame);// 按下 ESC 键退出if (waitKey(30) == 27) break;}// 释放摄像头并关闭窗口cap.release();destroyAllWindows();return 0;
}
5. Calib3d 模块
calib3d
模块提供了相机标定、3D 重建、姿态估计等功能。
主要功能
相机标定:
计算相机内参和畸变系数。
3D 重建:
从多视图图像中重建 3D 场景。
姿态估计:
估计物体的 3D 姿态。
实例
#include <opencv2/calib3d.hpp>
#include <opencv2/highgui.hpp>using namespace cv;int main() {// 读取图像Mat image1 = imread("left.jpg");Mat image2 = imread("right.jpg");if (image1.empty() || image2.empty()) return -1;// 特征点检测与匹配Ptr<Feature2D> detector = ORB::create();vector<KeyPoint> keypoints1, keypoints2;Mat descriptors1, descriptors2;detector->detectAndCompute(image1, noArray(), keypoints1, descriptors1);detector->detectAndCompute(image2, noArray(), keypoints2, descriptors2);BFMatcher matcher(NORM_HAMMING);vector<DMatch> matches;matcher.match(descriptors1, descriptors2, matches);// 计算基础矩阵vector<Point2f> points1, points2;for (const auto& match : matches) {points1.push_back(keypoints1[match.queryIdx].pt);points2.push_back(keypoints2[match.trainIdx].pt);}Mat fundamentalMatrix = findFundamentalMat(points1, points2, FM_RANSAC);// 输出基础矩阵cout << "Fundamental Matrix:\n" << fundamentalMatrix << endl;return 0;
}
6. DNN 模块
dnn
模块提供了深度学习模型的加载和推理功能。
主要功能
模型加载:
支持 TensorFlow、PyTorch、Caffe 等框架的模型。
推理:
对图像进行分类、目标检测、语义分割等。
实例
#include <opencv2/dnn.hpp>
#include <opencv2/highgui.hpp>using namespace cv;
using namespace dnn;int main() {// 加载模型Net net = readNetFromTensorflow("model.pb", "config.pbtxt");// 读取图像Mat image = imread("test.jpg");if (image.empty()) return -1;// 预处理Mat blob = blobFromImage(image, 1.0, Size(300, 300), Scalar(127.5, 127.5, 127.5), true, false);net.setInput(blob);// 推理Mat output = net.forward();// 处理输出// ...return 0;
}