OpenCV3.4.5+VS2017+扩展模块编译

隐身守侯 提交于 2020-05-02 20:17:47

一.准备工作

1.下载OpenCV源码

OpenCV源码和扩展模块(opencv_contrib)版本要对应:
1). OpenCV源码下载地址: OpenCV下载地址: https://github.com/opencv/opencv/releases

2). OpenCV扩展模块(opencv_contrib)下载地址:

https://github.com/opencv/opencv_contrib/releases

2.下载安装Cmake

二. 编译

  1. 分别解压opencv-3.4.5.zip和opencv_contrib-3.4.5.zip到同一个目录下的两个单独文件夹内

  2. 在该目录下新文件夹build:
    我的目录结构:

  3. 打开CMAKE_GUI, Browser Source选择 "...\opencv-3.4.5\opencv-3.4.5"
    Browser Build选择刚才新建的build目录 "...\opencv3.4.5\build"

  4. 点击Configure选择, Visual Studio 15 2017 Win64

  5. 点击Finish 开始配置

  6. FFmpeg下载失败 可以到这里:https://pan.baidu.com/s/1rF3KE3cripWm_mzSOT763A 提取码:usy5 下载, 下载完成之后放到 3rdparty 目录下

  7. 如提示自己电脑上安装了python3, 可能会出现python版本错误,则把 "OPENCV_PYTHON3_VERSION"勾选上!

  8. 配置"OPENCV_EXTRA_MODULES_PATH" 目录为opencv_contrib下的modules目录"...\opencv_contrib-3.4.5\modules"

  9. 如果要用编译opencv_contrib中的non-free算法模块:

    1. 为了保险起见,进入:opencv目录下,打开cmakelist.txt找到

      1. OCV_OPTION(OPENCV_ENABLE_NONFREE "Enable non-free algorithms" OFF),把OFF修改为ON

  10. 再次点击"Configure"
    成功之后点击"Generate"
    生成完成之后点击"Open Project"

  11. 在VS中分别用Debuge和Release模式编译一遍

![](https://img2018.cnblogs.com/blog/1508951/201901/1508951-20190123130156379-2013206263.png)
![](https://img2018.cnblogs.com/blog/1508951/201901/1508951-20190123130054317-350151991.png)
  1. 编译完成后, 右键 install->仅仅生产install
  2. 编译完成得到install文件夹, 除了该文件夹其他的都可以删除了

三.配置

  1. 右键我的电脑-->高级系统设置-->高级-->环境变量-->找到path-->新建-->填入build目录下:"...\install\x64\vc15\bin"

  2. 之后记得重启资源管理器

  3. 如果要在vs项目中使用则, 在项目管理器中Debuge|x64下新建属性表:

  4. VC++目录-->包含目录, 设置为刚才install目录下的include目录 "../build/install/include"

  5. 库目录设置为, X64目录下的lib目录 ".../build/install/x64/vc15/lib"

  6. 打开命令行,进入".../build/install/x64/vc15/lib"目录下. 按照图中所示输入命令,得到.lib文件名, dubuge版本的lib文件以d.lib结尾, release版本,没有d.(可根据自己配置的版本自行导出.lib文件 )

  7. 链接器输入,附加依赖项填入刚才得到的lib文件名

  8. 至此配置完成,下边进行测试

四.测试

  1. 在vs中键入如下代码:
  //代码转自知乎: https://zhuanlan.zhihu.com/p/40323837
  
  #include "pch.h"
  #include <opencv2/opencv.hpp> //包含头文件
  #include <iostream> 
  using namespace cv;    
  using namespace std;   
  int main(int argc, char** argv) {   
    Mat src = imread("E:/OpenCV/testimage/test.png");     //载入图像
    if (src.empty()) {                    //是不是为空
      printf("could not load image...\n");
      return -1;
    }
    namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);  //创建窗口,自动大小
    imshow("test opencv setup", src);            //显示图像,窗口标题
    waitKey(0);                       //x=0无限等待下去,直到有按键按下,等待用户按键退出程序
    return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!