OpenCV 如何在 windows 10 源码编译安装 opencv4.1.1 和 opencv_contrib

sumu · 2019年08月19日 · 565 次阅读

如何在windows 10下使用visual studio 2019编译安装opencv4.1.1和opencv_contrib

1 准备工作

  • opencv 4.1.1 源码
  • opencv_contrib 源码
  • cmake 工具
  • visual studio 2019编译器

第一步就是到github上获取opencv的源码,地址https://github.com/opencv/opencv 第二步就是到github上获取对应的opencv_contrib的源码,地址为https://github.com/opencv/opencv_contrib 怎么来获取版本一致的opencv和opencv_contrib呢,这里给大家推荐一个方式,大家不要获取opencv和opencv_contrib的master分支,首先第一步先进入上述网址,第二步点击release,第三步选择一个版本的opencv,下载器源码。然后重复上述操作下载对应版本的opencv_contrib源码。如图所示,

然后整理下文件夹,我是这么归类的,建立一个OpenCV的目录,并在其中建立一个build文件夹,用来存放编译后生成的文件。然后拷贝下载的opencv和opencv_contrib并且解压。完成后的目录配置如下,

第三步就是下载安装cmake(此次用的版本cmake-3.15.2-win64-x64.msi)和visual studio 2019,这个就看官网说明就可以,不再详细介绍。

2 编译opencv和opencv_contrib

第一步打开cmake,然后会配置cmake工具,where is the source code 目录为opencv源码目录,就是你解压opencv目录(本次是D:/OpenCV/opencv-4.1.1)。然后配置编译后文件输出目录,就是刚新建的build目录(本次使用的是D:/OpenCV/build)。如图,

然后点击configure按钮。这个时候会默认选择你电脑上的编译器作为编译工具,此处为vs2019,x64平台。配置完成后如图,

点击完成后,cmake就会读取opencv的CMakeLists文件,并且下载一些库文件比如intel cpu加速库,ffmpeg等,可能需要等一会...等待配置完成后,如下图

这个阶段只是Cmake读取opencv的CMakeLists文件生成的可视化配置选项,我们可以根据自己的需求来调整编译选项。此处根据使用选项不同可以选择不同配置,仅仅按照我自己需要来进行配置演示。 首先配置OPENCV_EXTRA_MODULES_PATH 为D:/OpenCV/opencv_contrib-4.1.1/modules也就是我们编译opencv_contrib模块。 然后我不用python、java、cuda 这里均不配置。 我编译成一个lib文件,配置OPENCV_build_world 勾选。

然后再次点击configure按钮,等待更新配置项的完成。如果配置完成后仍然有红色就说明,配置过程中有些文件下载失败了,就重新点击configure就可以。然后配置完成后点击generator来生成Opencv.sln文件。

然后我们打开build目录下生成的opencv.sln工程,来进行编译。选择生成-批生成-然后勾选ALL_BUILD和INSTALL选项,点击生成,然后就可以慢慢等待编译完成了。如图所示,

3 配置opencv项目

打开visual studio 2019 新建一个c++的空项目。 第一步,点击项目-属性。如图,

首先配置下配置管理器,opencv可以配置成debug/release,可以根据电脑是32位还是64位配置成x86或者x64。我这里配置成debug、x64。

然后点击vc++目录,这里需要配置包含的include和lib,其实就是opencv的头文件和lib文件放在哪里了,要不然编译器去哪里找呢?那这个目录在哪里呢,就在我们新建的build目录下的install目录下。 包含目录配置为:(这里不要死板,配置到include目录即可)可参考 D:\OpenCV\build\install\include D:\OpenCV\build\install\include\opencv2 库目录配置为:(这里不要死板,配置到lib目录即可)可参考D:\OpenCV\build\install\x64\vc16\lib 然后点击连接器-输入-附加依赖项,然后将lib目录下的lib文件输进入,如果你勾选了cmake时配置了BUILD_opencv_world,此时你只需要配置opencv_world411.lib opencv_world411.lib 这两个文件即可(注意:我这里说的需要配置指的是如果你选的debug,请配置带d的lib,比如opencv_world411.lib。如果你选择的release,请配置不带d的lib),如果你没有勾选BUILD_opencv_world选项,那这个lib目录下生成的各个模块的都需要配置到这里。到这里我们就基本已经配置完成了。大家也可以看到我写了基本完成,到这里你就可以写程序,然后编译了,但是不能运行,因为动态链接库还没有配置到环境变量中。下面我们配置。

第二步 ,配置环境变量 刚才在配置的时候,我们可以看到我们生成文件中和lib同级目录中还有个bin目录,这个就是包含opencv的动态链接库的目录,我们需要把这个目录添加到系统的环境变量中。 首先点击 此电脑-右键属性-高级系统设置-系统变量-系统变量的PATH中添加上述目录,就是包含bin的那个目录,这里要灵活,我这里是D:\OpenCV\build\install\x64\vc16\bin 然后到这里我们就配置完成了。

4 测试程序

我们尝试一下,看一看能不能运行,首先写一下opencv版本的hello world。

/*
//author:https://cncv.org
//time:2019/8/20 19:50
*/

//包含opencv头文件
//首先应该包含opencv.hpp头文件,应该包含build(编译输出的那个目录)build\install\include\opencv2\opencv.hpp
//因为我们刚刚配置了include目录所以我们现在就可以写相对目录即可。
#include <opencv2/opencv.hpp>
#include <iostream>
//包含cv命名空间,如果不包含cv命名空间,使用其中类或者函数时需要使用作用于::
//例如 cv::Mat
using namespace cv;
using namespace std;

int main()
{
    //读取图片(可以使用图片的绝对路径,也可以使用相对路径)
    //读入图像,并将之转为单通道图像
    Mat im = imread("1.jpg");

    //请一定检查是否成功读图
    if (im.empty())
    {
        cout << "Can not load image." << endl;
        return -1;
    }

    imshow("原画", im);

    //不加此语句图片会一闪而过
    waitKey(0);

    return 0;
}

然后F5 编译运行,就可以看到这个lena了。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册