opencv2/opencv.hpp 是 OpenCV(Open Source Computer Vision Library)的核心头文件,它包含了 OpenCV 的大部分功能模块的声明。OpenCV 是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、视频分析、目标检测和识别等领域。

以下是一些在 opencv2/opencv.hpp 中声明的常用函数和类,按功能模块分类介绍:

1. 图像读取与显示

  • cv::imread:读取图像文件

    cv::Mat img = cv::imread("image.jpg", cv::IMREAD_COLOR);
  • cv::imshow:显示图像

    cv::imshow("Window Name", img);
  • cv::imwrite:保存图像到文件

    cv::imwrite("output.jpg", img);
  • cv::waitKey:等待键盘输入

    cv::waitKey(0); // 等待用户按键

2. 图像处理

  • cv::cvtColor:颜色空间转换

    cv::Mat gray;
    cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
  • cv::GaussianBlur高斯模糊

    cv::Mat blurred;
    cv::GaussianBlur(img, blurred, cv::Size(5, 5), 0);
  • cv::Canny:Canny边缘检测

    cv::Mat edges;
    cv::Canny(gray, edges, 50, 150);
  • cv::threshold:阈值操作

    cv::Mat binary;
    cv::threshold(gray, binary, 128, 255, cv::THRESH_BINARY);

3. 几何变换

  • cv::resize:调整图像大小

    cv::Mat resized;
    cv::resize(img, resized, cv::Size(300, 300));
  • cv::flip:图像翻转

    cv::Mat flipped;
    cv::flip(img, flipped, 1); // 水平翻转
  • cv::warpAffine仿射变换

    cv::Mat rotated;
    cv::Mat rotMat = cv::getRotationMatrix2D(cv::Point2f(img.cols / 2, img.rows / 2), 45, 1.0);
    cv::warpAffine(img, rotated, rotMat, img.size());
  • cv::warpPerspective:透视变换

    cv::Mat warped;
    cv::Mat perspMat = cv::getPerspectiveTransform(srcPoints, dstPoints);
    cv::warpPerspective(img, warped, perspMat, img.size());

4. 特征检测与描述

  • cv::SIFT:尺度不变特征变换(SIFT)

    cv::Ptr<cv::SIFT> sift = cv::SIFT::create();
    std::vector<cv::KeyPoint> keypoints;
    cv::Mat descriptors;
    sift->detectAndCompute(img, cv::Mat(), keypoints, descriptors);
  • cv::ORB:定向快速和旋转不变特征(ORB)

    cv::Ptr<cv::ORB> orb = cv::ORB::create();
    orb->detectAndCompute(img, cv::Mat(), keypoints, descriptors);
  • cv::drawKeypoints:绘制关键点。

    cpp

    复制

    cv::Mat imgWithKeypoints;
    cv::drawKeypoints(img, keypoints, imgWithKeypoints, cv::Scalar::all(-1), cv::DrawMatchesFlags::DEFAULT);

5. 视频处理

  • cv::VideoCapture:读取视频文件或摄像头。

    cpp

    复制

    cv::VideoCapture cap("video.mp4");
  • cv::VideoWriter:保存视频文件。

    cpp

    复制

    cv::VideoWriter writer;
    writer.open("output.mp4", cv::VideoWriter::fourcc('m', 'p', '4', 'v'), 30, cv::Size(640, 480));
  • cv::Mat:用于存储视频帧。

    cpp

    复制

    cv::Mat frame;
    while (cap.read(frame)) {
        cv::imshow("Frame", frame);
        writer.write(frame);
    }

6. 数学运算

  • cv::add:图像加法。

    cpp

    复制

    cv::Mat result;
    cv::add(img1, img2, result);
  • cv::subtract:图像减法。

    cpp

    复制

    cv::subtract(img1, img2, result);
  • cv::multiply:图像乘法。

    cpp

    复制

    cv::multiply(img1, img2, result, 1.0, CV_32F);

7. 绘图功能

  • cv::rectangle:绘制矩形。

    cpp

    复制

    cv::rectangle(img, cv::Point(10, 10), cv::Point(100, 100), cv::Scalar(0, 255, 0), 2);
  • cv::circle:绘制圆形。

    cpp

    复制

    cv::circle(img, cv::Point(50, 50), 30, cv::Scalar(0, 0, 255), -1);
  • cv::line:绘制直线。

    cpp

    复制

    cv::line(img, cv::Point(0, 0), cv::Point(100, 100), cv::Scalar(255, 0, 0), 2);
  • cv::putText:在图像上绘制文本。

    cpp

    复制

    cv::putText(img, "Hello, OpenCV!", cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(255, 255, 255), 2);

8. 机器学习

  • cv::ml::SVM:支持向量机(SVM)。

    cpp

    复制

    cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
    svm->setType(cv::ml::SVM::C_SVC);
    svm->setKernel(cv::ml::SVM::LINEAR);
    svm->train(trainingData, cv::ml::ROW_SAMPLE, labels);
  • cv::ml::KNearest:K-近邻算法(KNN)。

    cpp

    复制

    cv::Ptr<cv::ml::KNearest> knn = cv::ml::KNearest::create();
    knn->train(trainingData, cv::ml::ROW_SAMPLE, labels);

9. 深度学习

  • cv::dnn::readNetFromCaffe:从Caffe模型加载深度学习网络。

    cpp

    复制

    cv::dnn::Net net = cv::dnn::readNetFromCaffe("deploy.prototxt", "weights.caffemodel");
  • cv::dnn::readNetFromTensorflow:从TensorFlow模型加载深度学习网络。

    cpp

    复制

    cv::dnn::Net net = cv::dnn::readNetFromTensorflow("model.pb");
  • cv::dnn::Net::setInput:设置输入数据。

    cpp

    复制

    cv::Mat blob = cv::dnn::blobFromImage(img, 1.0, cv::Size(300, 300), cv::Scalar(104, 117, 123));
    net.setInput(blob);
  • cv::dnn::Net::forward:执行前向传播。

    cpp

    复制

    cv::Mat detections = net.forward();

10. 其他常用功能

  • cv::findContours:查找轮廓。

    cpp

    复制

    std::vector<std::vector<cv::Point>> contours;
    cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
  • cv::drawContours:绘制轮廓。

    cpp

    复制

    cv::drawContours(img, contours, -1, cv::Scalar(0, 255, 0), 2);
  • cv::inRange:颜色阈值分割。

    cpp

    复制

    cv::Mat mask;
    cv::inRange(hsv, cv::Scalar(35, 43, 46), cv::Scalar(77, 255, 255), mask);

总结

opencv2/opencv.hpp 是 OpenCV 的核心头文件,包含了大量用于图像处理、视频处理、特征检测、机器学习和深度学习的函数和类。以上列出的是一些常用的函数,但 OpenCV 的功能远不止这些。通过阅读官方文档和参考示例代码,可以更深入地了解和使用 OpenCV 的强大功能。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐