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;
}
相关推荐
数智化管理手记14 分钟前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
thesky12345620 分钟前
27届大模型岗面试准备(五):预训练全流程拆解——从数据清洗到 Tokenizer 再到 PT 的每
人工智能·面试·大模型·预训练·tokenizer
attitude.x22 分钟前
2026年数据透视分析工具推荐:多维与融合对比
人工智能
就是一顿骚操作25 分钟前
Agent Loop 入门到深入:从 ReAct 到 LangGraph、Agents SDK 与 MCP
人工智能·大模型·llm·论文解读·ai agent
quanjui30 分钟前
【医学尝试】基于Segment Anything Model的医学图像分割研究:眼底OCT与X线胸片微调实战
人工智能·笔记·学习
就是一顿骚操作32 分钟前
Dropout:神经网络正则化的经典解读
人工智能·深度学习·神经网络·论文解读
2401_843253701 小时前
数据隐私AI:从合规检查到隐私计算的Skill化
人工智能
清川渡水1 小时前
NL2SQL 的正确打开方式:从「AI 猜 SQL」到「置信度闭环」的工程化落地
数据库·人工智能·sql
Lyra_Infra1 小时前
OpenClaw 服务异常故障分析报告
linux·人工智能
半个落月1 小时前
用 Node.js 搭建 EPUB 问答助手:从文本切片、向量检索到 RAG
人工智能·node.js