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 文件等。
  • 内存管理

    • 自动内存管理,支持引用计数。

实例

cpp 复制代码
#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 等边缘检测算法。
  • 形态学操作

    • 腐蚀、膨胀、开运算、闭运算等。
  • 阈值化

    • 简单阈值化、自适应阈值化等。

实例

cpp 复制代码
#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 模块提供了图像和视频的显示、窗口管理以及用户交互功能。

主要功能
  • 图像显示

    • 创建窗口、显示图像、等待用户输入。
  • 视频捕获

    • 从摄像头或视频文件中读取帧。
  • 用户交互

    • 鼠标事件、滑动条、按钮等。

实例

cpp 复制代码
#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 模块提供了视频处理功能,包括视频捕获、背景减除、光流计算等。

主要功能
  • 视频捕获

    • 从摄像头或视频文件中读取帧。
  • 背景减除

    • 提取视频中的前景对象。
  • 光流计算

    • 计算图像中物体的运动。

实例

cpp 复制代码
#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 姿态。

实例

cpp 复制代码
#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 等框架的模型。
  • 推理

    • 对图像进行分类、目标检测、语义分割等。

实例

cpp 复制代码
#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;
}
相关推荐
Danceful_YJ19 小时前
35.微调BERT
人工智能·深度学习·bert
ZPC821019 小时前
FPGA 部署ONNX
人工智能·python·算法·机器人
愿没error的x19 小时前
深度学习基础知识总结(一):深入理解卷积(Convolution)
人工智能·深度学习
罗西的思考19 小时前
【智能硬件】AI 眼镜论文笔记
人工智能
AI浩19 小时前
Mamba YOLO: 基于状态空间模型的目标检测简单基线
人工智能·yolo·目标检测
GitCode官方20 小时前
面壁智能入驻 GitCode:端侧 AI 开发获全新生产力引擎
人工智能·gitcode
拓端研究室20 小时前
专题:2025AI时代的医疗保健业:应用与行业趋势研究报告|附130+份报告PDF、数据、可视化模板汇总下载
大数据·人工智能
咋吃都不胖lyh20 小时前
激活函数是什么,神经网络中为什么要有激活函数
人工智能·深度学习·神经网络·激活函数
Ma04071320 小时前
【论文阅读15】-DiagLLM:基于大型语言模型的多模态推理,用于可解释的轴承故障诊断
人工智能·语言模型·自然语言处理
芯盾时代20 小时前
《网络安全法》完成修改,AI安全正式“入法”
人工智能·安全·web安全