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;
}
相关推荐
TF男孩14 小时前
重新认识Markdown:它不仅是排版工具,更是写Prompt的最佳结构
人工智能
想打游戏的程序猿15 小时前
AI时代的内容输出
人工智能
小兵张健15 小时前
Playwright MCP 截图标注方案调研:推荐方案 1
人工智能
凌杰17 小时前
AI 学习笔记:Agent 的能力体系
人工智能
IT_陈寒18 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
舒一笑20 小时前
如何获取最新的技术趋势和热门技术
人工智能·程序员
聚客AI20 小时前
🎉OpenClaw深度解析:多智能体协同的三种模式、四大必装技能与自动化运维秘籍
人工智能·开源·agent
黄粱梦醒20 小时前
大模型企业级部署方案-vllm
人工智能·llm
IT_陈寒20 小时前
JavaScript代码效率提升50%?这5个优化技巧你必须知道!
前端·人工智能·后端
IT_陈寒20 小时前
Java开发必知的5个性能优化黑科技,提升50%效率不是梦!
前端·人工智能·后端