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 
#include 
using namespace cv;
using namespace std;
int main() {
    // 创建一个 3x3 的矩阵
    Mat mat = (Mat_(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
    // 输出矩阵
    cout << "Matrix:\n" << mat << endl;
    // 访问矩阵元素
    int value = mat.at(1, 1);
    cout << "Value at (1, 1): " << value << endl;
    return 0;
}    
2. Imgproc 模块
imgproc 模块提供了图像处理功能,包括滤波、几何变换、颜色空间转换等。
主要功能
图像滤波:
均值滤波、高斯滤波、中值滤波等。
几何变换:
缩放、旋转、仿射变换、透视变换等。
颜色空间转换:
RGB 到灰度、HSV、Lab 等颜色空间的转换。
边缘检测:
Canny、Sobel、Laplacian 等边缘检测算法。
形态学操作:
腐蚀、膨胀、开运算、闭运算等。
阈值化:
简单阈值化、自适应阈值化等。
实例
#include 
#include 
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 
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 
#include 
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 
#include 
using namespace cv;
int main() {
    // 读取图像
    Mat image1 = imread("left.jpg");
    Mat image2 = imread("right.jpg");
    if (image1.empty() || image2.empty()) return -1;
    // 特征点检测与匹配
    Ptr detector = ORB::create();
    vector keypoints1, keypoints2;
    Mat descriptors1, descriptors2;
    detector->detectAndCompute(image1, noArray(), keypoints1, descriptors1);
    detector->detectAndCompute(image2, noArray(), keypoints2, descriptors2);
    BFMatcher matcher(NORM_HAMMING);
    vector matches;
    matcher.match(descriptors1, descriptors2, matches);
    // 计算基础矩阵
    vector 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 
#include 
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;
}  
                    
                
                
            
        
浙公网安备 33010602011771号