现在位置: 首页 > OpenCV 教程 > 正文

C++ 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:用于存储图像和矩阵数据。

    • PointSizeRect:用于表示点、尺寸和矩形区域。

    • 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;
}