zoukankan      html  css  js  c++  java
  • OpenCV从2到3的过渡

    与版本2.4相比,OpenCV 3.0引入了许多新算法和功能。有些模块已被重写,有些已经重组。尽管2.4中的大多数算法仍然存在,但接口可能不同。本节描述了一般性的最显着变化,过渡操作的所有细节和示例都在本文档的下一部分中。

    1、贡献存储库

     https://github.com/opencv/opencv_contrib

    这是一个适用于所有新算法,实验算法和非免费算法的地方。与主存储库相比,它没有得到支持团队的太多关注,但社区努力使其保持良好状态。(即OpenCV的附加库,人脸识别等一些附加的功能可能需要用到这个库)

    要使用contrib存储库构建OpenCV ,请将以下选项添加到cmake命令:

    -DOPENCV_EXTRA_MODULES_PATH=<path-to-opencv_contrib>/modules

    或者参考我的博客为opencv添加contrib库

    2、头文件布局

      在2.4中,所有头文件都位于相应的模块子文件夹(opencv2 / <module> / <module> .hpp)中,在3.0中有顶级模块头文件,其中包含大部分模块功能:opencv2 / <module> .hpp和所有 C语言风格的API定义已移至单独的标头(例如opencv2 / core / core_c.h)。

    3、算法接口

      通用算法使用模式已更改:现在必须在包装在智能指针cv :: Ptr中的堆上创建。版本2.4允许直接或通过智能指针进行堆栈和堆分配。

      已经从cv :: Algorithm类中删除了getset方法以及CV_INIT_ALGORITHM宏。在3.0中,所有属性都已转换为getProperty / setProperty纯虚拟方法对。因此,它是不是能够创建和使用CV ::算法通过名称实例(使用通用的算法::创建(字符串)方法),应该显式调用相应的函数方法。

    4、重写了模块

    • ml模块已被重写
    • highgui模块已被拆分为:imgcodecsvideoiohighgui本身
    • features2d模块已重组(某些功能检测器已移至opencv_contrib / xfeatures2d模块)
    • 传统的非自由的模块已被删除。一些算法已被移动到不同的位置,一些算法已被完全重写或删除
    • CUDA API已更新(gpu模块 - >几个cuda模块,命名空间gpu - >命名空间cuda
    • OpenCL API已经改变(ocl模块已被删除,单独的ocl :: implementation - > Transparent API)
    • 其他一些方法和类已被重新定位

    5、机器学习模块

    由于此模块已被重写,因此需要花费一些精力才能使您的软件适应它。所有算法都与其基类StatModel一起位于单独的ml命名空间中单独的SomeAlgoParams类已被一组相应的getProperty / setProperty方法替换

    下表说明了2.4和3.0机器学习类之间的对应关系。

    尽管3.0中重写的ml算法允许您从xml / yml文件加载旧的训练模型,但预测过程中的偏差是可能的。

    points_classifier.cpp示例中的以下代码片段说明了模型培训过程中的差异:

    using namespace cv;
    // ======== version 2.4 ========
    Mat trainSamples, trainClasses;
    prepare_train_data( trainSamples, trainClasses );
    CvBoost  boost;
    Mat var_types( 1, trainSamples.cols + 1, CV_8UC1, Scalar(CV_VAR_ORDERED) );
    var_types.at<uchar>( trainSamples.cols ) = CV_VAR_CATEGORICAL;
    CvBoostParams  params( CvBoost::DISCRETE, // boost_type
                           100, // weak_count
                           0.95, // weight_trim_rate
                           2, // max_depth
                           false, //use_surrogates
                           0 // priors
                         );
    boost.train( trainSamples, CV_ROW_SAMPLE, trainClasses, Mat(), Mat(), var_types, Mat(), params );
    // ======== version 3.0 ========
    Ptr<Boost> boost = Boost::create();
    boost->setBoostType(Boost::DISCRETE);
    boost->setWeakCount(100);
    boost->setWeightTrimRate(0.95);
    boost->setMaxDepth(2);
    boost->setUseSurrogates(false);
    boost->setPriors(Mat());
    boost->train(prepare_train_data()); // 'prepare_train_data' returns an instance of ml::TrainData class

    6、功能检测

    一些算法(FREAK,BRIEF,SIFT,SURF)已移至opencv_contrib存储库,xfeatures2d模块,xfeatures2d命名空间。它们的接口也已更改(从cv::Feature2D基类继承)。

    xfeatures2d模块类列表

    需要以下步骤:

    1. opencv_contrib添加到编译过程
    2. 包括opencv2/xfeatures2d.h标题
    3. 使用命名空间 xfeatures2d
    4. 替换operator()呼叫detectcompute或者detectAndCompute如果需要

    有些类现在使用通用方法detectcompute或者detectAndComputeFeature2D基类而不是自定义提供operator()

    以下代码片段说明了差异(来自video_homography.cpp示例):

    using namespace cv;
    // ====== 2.4 =======
    #include "opencv2/features2d/features2d.hpp"
    BriefDescriptorExtractor brief(32);
    GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4);
    // ...
    detector.detect(gray, query_kpts); //Find interest points
    brief.compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location
    // ====== 3.0 =======
    #include "opencv2/features2d.hpp"
    #include "opencv2/xfeatures2d.hpp"
    using namespace cv::xfeatures2d;
    Ptr<BriefDescriptorExtractor> brief = BriefDescriptorExtractor::create(32);
    Ptr<FastFeatureDetector> detector = FastFeatureDetector::create(10, true);
    // ...
    detector->detect(gray, query_kpts); //Find interest points
    brief->compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location

    7、OpenCL

    所有专门的ocl实现都隐藏在通用C ++算法接口之后。现在可以在运行时动态选择函数执行路径:CPU或OpenCL; 这种机制也称为“透明API”。

    新类cv :: UMat旨在以方便的方式隐藏与OpenCL设备的数据交换。

    以下示例说明了API修改(来自OpenCV站点):

    • OpenCL感知代码OpenCV-2.x
    // initialization
    VideoCapture vcap(...);
    ocl::OclCascadeClassifier fd("haar_ff.xml");
    ocl::oclMat frame, frameGray;
    Mat frameCpu;
    vector<Rect> faces;
    for(;;){
        // processing loop
        vcap >> frameCpu;
        frame = frameCpu;
        ocl::cvtColor(frame, frameGray, BGR2GRAY);
        ocl::equalizeHist(frameGray, frameGray);
        fd.detectMultiScale(frameGray, faces, ...);
        // draw rectangles …
        // show image …
    }
    • OpenCL感知代码OpenCV-3.x
    // initialization
    VideoCapture vcap(...);
    CascadeClassifier fd("haar_ff.xml");
    UMat frame, frameGray; // the only change from plain CPU version
    vector<Rect> faces;
    for(;;){
        // processing loop
        vcap >> frame;
        cvtColor(frame, frameGray, BGR2GRAY);
        equalizeHist(frameGray, frameGray);
        fd.detectMultiScale(frameGray, faces, ...);
        // draw rectangles …
        // show image …
    }

    8、cuda

    cuda模块已分成几个小块:

    gpu命名空间已被删除,请改用cv :: cuda命名空间。许多类也已重命名,例如:

    9、文档格式

    文档已转换为Doxygen格式。您可以在OpenCV参考文档的教程部分(OpenCV的编写文档)中找到更新的文档编写指南

    10、支持两个版本

    在某些情况下,可以支持两种版本的OpenCV。

    11、源代码版本检测

    要检查应用程序源代码中的库主要版本,应使用以下方法:

    #include "opencv2/core/version.hpp"
    #if CV_MAJOR_VERSION == 2
    // do opencv 2 code
    #elif CV_MAJOR_VERSION == 3
    // do opencv 3 code
    #endif

    注意不要使用CV_VERSION_MAJOR,它对2.4和3.x分支有不同的含义!

    12、编译系统

    通过检查编译系统中的库版本,可以链接不同的模块或启用/禁用应用程序中的某些功能。标准的cmake或pkg-config变量可用于此:

    • OpenCV_VERSION 对于cmake,将包含完整版本:例如“2.4.11”或“3.0.0”
    • OpenCV_VERSION_MAJOR 对于cmake,将仅包含主要版本号:2或3
    • pkg-config文件有标准字段 Version

    例:

    if(OpenCV_VERSION VERSION_LESS "3.0")
    # use 2.4 modules
    else()
    # use 3.x modules
    endif()
    

      

  • 相关阅读:
    Brettle.Web.NeatUpload.dll支持的大文件上传
    WebStorm:令人眼前一亮的一款前端开发IDE
    jQuery UI vs EasyUI
    jquery validate.js表单验证的基本用法入门
    JQuery扩展插件Validate—6radio、checkbox、select的验证位置显示
    ExtJs与jQuery的比较
    WebStorm 5.0 注册码
    常用PHP运行环境一键安装包
    Sublime Text 2.0.1 简体中文版来了 技术帝的最爱
    JS匿名函数
  • 原文地址:https://www.cnblogs.com/noticeable/p/9612846.html
Copyright © 2011-2022 走看看