(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安装目录下的sources\3rdparty\ffmpeg\ffmpeg.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

找到链接后,我用迅雷进行下载,然后放到sources\3rdparty\ffmpeg\downloads对应的目录下即可

2、“ippicv_windows_20151201.zip”not downloaded

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

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

使用迅雷下载后,放到sources\3rdparty\ippicv\downloads对应的目录下即可

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

解决方案:在graphcuts.cpp中将

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

改为

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

 

posted @ 2020-04-13 14:30  zero_to_infinity  阅读(412)  评论(0编辑  收藏  举报