zoukankan      html  css  js  c++  java
  • (Windows) OpenCV 3.1.0 + opencv_contrib编译

    一、准备工作

    1、下载OpenCV安装包

    https://github.com/opencv/opencv/tree/3.1.0

    安装完成结果如下

    2、下载opencv_contrib源码

    https://github.com/opencv/opencv_contrib/tree/3.1.0

    解压结果如下

    注意版本号要对应

    3、下载并解压TBB 4.4 Update 3

    https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb44_20160128oss_win_0.zip

    4、下载并解压Eigen 3.2.8

    http://bitbucket.org/eigen/eigen/get/3.2.8.zip

    5、新建文件夹opencv3.1.0_with_contrib,最终的目录结构为

    6、自行下载安装cmake-gui工具

    二、生成OpenCV.sln

    1、设置源码路径和编译路径,点击Configure

    2、在Search输入OPENCV_EXTRA_MODULES_PATH,将其参数值设置为open_contrib源码包中的modles目录

    3、在Search输入CUDA_HOST_COMPILER,将其参数值设置为VS2015的编译器

    4、勾选WITH_TBB,并修改设置如下

    5、勾选WITH_EIGEN,并修改设置如下

     6、总结

    WITH_NVCUVID这一项不能勾选

    BUILD_opencv_world不能勾选,我勾选之后编译出错

    需要勾选的是:WITH_TBB、WITH_IPP、WITH_EIGEN、WITH_CUBLAS、WITH_CUDA、WITH_CUFFT和WITH_OPENGL

    另外,TEST选项我也取消勾选了

    7、再次点击Configure,如果没有什么问题,就可以通过Generate生成OpenCV.sln(过程中可以多次点击Configure以刷新配置列表)

    三、用VS2015编译OpenCV

    1、首先在Debug模式下,右击ZERO_CHECK项目,点击Build;再切换到Release模式下,右击ZERO_CHECK项目,点击Build。看两次编译是否产生错误。如果两次编译成功,则进行下一步

     2、开始编译

    在Debug状态下,右键ALL_BUILD生成。生成成功后右键INSTALL-仅用于项目-仅生成INSTALL,完成debug的安装

    在Release状态下,右键ALL_BUILD生成。生成成功后右键INSTALL-仅用于项目-仅生成INSTALL,完成release的安装

    编译成功后,install里的etc,include,x64三个文件夹就是编译得到的OpenCV库

     四、测试OpenCV库

     新建解决方案,将以下代码拷贝过去,配置OpenCV方法自行百度

    #include <iostream>#include <opencv2/opencv.hpp>
    #include <opencv2/xfeatures2d.hpp>
    #include <stdio.h>
    
    using namespace cv;
    
    int main()
    {
        Mat srcImg = imread("20200407175433.png", 1);
        if (srcImg.empty())
            return -1;
    
        Ptr<cv::Feature2D> detector = xfeatures2d::SIFT::create(128);
        std::vector<KeyPoint> keypoints;
        Mat descriptors;
        detector->detect(srcImg, keypoints);
        detector->compute(srcImg, keypoints, descriptors);
        drawKeypoints(srcImg, keypoints, srcImg, Scalar::all(-1), DrawMatchesFlags::DRAW_OVER_OUTIMG);
        namedWindow("output", WINDOW_AUTOSIZE);
        imshow("output", srcImg);
        waitKey(0);
    
        return 0;
    }

    运行结果

    五、遇到的问题

    1、Failed to download opencv_ffmpeg.dll

    解决方法:在opencv安装目录下的sources3rdpartyffmpegffmpeg.cmake,可以找到下载对应文件的链接,如:

    https://raw.githubusercontent.com/Itseez/opencv_3rdparty/8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb/ffmpeg/opencv_ffmpeg.dll

    https://raw.githubusercontent.com/Itseez/opencv_3rdparty/8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb/ffmpeg/opencv_ffmpeg_64.dll

    找到链接后,我用迅雷进行下载,然后放到sources3rdpartyffmpegdownloads对应的目录下即可

    2、“ippicv_windows_20151201.zip”not downloaded

    解决方法:在opencv安装目录下的sources3rdpartyippicvdownloader.cmake,可以找到下载对应文件的链接,如:

    https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv/ippicv_windows_20151201.zip

    使用迅雷下载后,放到sources3rdpartyippicvdownloads对应的目录下即可

     3、语法错误:标识符"NppiGraphcutState"

    解决方案:在graphcuts.cpp中将

    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) 

    改为

    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

  • 相关阅读:
    团队计划
    python数据处理学习
    ShellExecute函数
    WinAPI WinMain函数
    I2C相关知识学习
    JavaScript多元运算符
    彻底理解js中的&&和||
    彻底理解线程同步与同步代码块synchronized
    JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
    JS参数使用带参数的方法
  • 原文地址:https://www.cnblogs.com/zerotoinfinity/p/12667631.html
Copyright © 2011-2022 走看看