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;
}
相关推荐
冷雨夜中漫步5 分钟前
DeepSeek Harness:一切皆插件的 AI Agent 框架深度解析
java·人工智能·ai·开源·github
IT_陈寒5 分钟前
Vite热更新失效?八成是这个配置在搞鬼
前端·人工智能·后端
皮皮虾❀7 分钟前
AI Agent可观测性:在钉钉生态中构建透明、可控的智能体服务
人工智能·钉钉
ʜᴇɴʀʏ9 分钟前
TIP 2025 | DIL-SSOD:密集信息增强与关系一致性正则化的半监督目标检测
人工智能·目标检测·目标跟踪
Nomarsgo12 分钟前
柔性生产平台工业显示解决方案——基于联控 Lionconit IFD-1901 工业显示器打造高可靠人机交互终端
人工智能·科技·计算机外设·视觉检测·电脑·人机交互·制造
天天代码码天天26 分钟前
不装 Android Studio,也能把 Vue / React 一键打成 APK:开源工具 lw.Web2Android
人工智能
武子康26 分钟前
DeepSeek Harness:Subagent、Job、Goal 都叫任务,为什么不能混成一个对象
人工智能·llm·agent
这张生成的图像能检测吗1 小时前
图像处理 / 底层视觉论文解析汇总目录
图像处理·人工智能
探路者继续奋斗1 小时前
AI资产科普
人工智能