windows10上利用 VSCode+MinGW + CMake安装编译openCV

在Windows10平台上,有时候只是想利用OpenCV完成一些小功能,或者测验其中某些函数。基于这个目的来说安装VisualStudio 显得过于庞大。 选用一些轻量级的代码编辑器更为合适,比如VSCode,其实sublime,notepad也可以,本文以VSCode为主。

环境

Windows10 

Visual Studio Code - 1.44.2

openCV - 3.3.0

MinGw - 8.1.0(Posix)

CMake - 3.17


步骤

1.安装/配置VSCode

官方下载地址:https://code.visualstudio.com/

安装完之后,在左边的功能栏,点击插件按钮,搜索并安装 C/C++ 插件。

实际上还需要编辑 task.json 和 c_cpp_properties.json这两个与工程编译相关的文件,下面的步骤我们再讲。

2.安装OpenCV

官方网址:https://opencv.org

官方提供了从openCV2.0---4.3.0的各种版本,我选择的是windows平台上的openCV3.3.0,因为这和我们公司内网服务器上的openCV版本是一样的。

下载完之后,打开。看上去是个.exe结尾的可执行文件,实际上双击之后的过程就是解压而已。

注意:不要把解压后的文件夹放在有空格的路径下,这样后面可能会出问题;也最好不要放在C盘。

windows10上利用 VSCode+MinGW + CMake安装编译openCV_第1张图片

解压完之后,你会发现有两个目录:

 一个是source文件夹:这个是opencv C++源代码;

一个是build文件夹  :  这是官方根据源码编译好的动态链接库。

我看网上很多教程在配置VSCode和OpenCV的时候,都是把build文件夹内的东西当作动态链接库添加到系统路径,然而我试了N次,换了四五个openCV版本,都会报错,大部分都是提示 调用到的opencv的函数存在未定义的引用。

后来我换了思路,自己用CMake编译 source路径下的源代码,来手动生成动态链接库。

所以,下面一步是安装并配置MinGW和CMake。

3.安装MinGW(编译器

MinGW,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。

下载地址:MinGW-w64:https://sourceforge.net/projects/mingw-w64/files/

在这个下载页面可以看到很多MinGW的版本,下划拉选择x86_64-posix-seh(64位系统适用,32位请选择i686-posix-sjlj),版本建议选择MinGW-W64 GCC-8.1.0,不要太往前,C++的一些新特性在旧的编译器里可能不适用,导致编译的时候会报错。之所以选择posix版本,看到有博客说win32版本在编译或者运行的时候可能会有问题。

下载完之后,实际上是个压缩包,把压缩到解压到你想存放的路径上去,但是注意:不要存放在绝对路径名含空格的路径上,比如D:/program files/ 这样的路径, 否则后面编译/运行的时候会发生问题。

然后把 mingw64下bin文件夹的绝对路径添加系统环境变量中去。比如,mingw64解压后你存放在D:/下,那么bin文件夹的绝对路径就是D:/mingw64/bin  。           

环境变量添加方法:右击桌面上 我的电脑 图标,选择 属性,然后点击左侧的 高级系统属性,在弹出框的右下方点击环境变量,然后单击选中PATH,点击 编辑--->新建,把对应的 bin目录的绝对路径添加进去。

至此,mingw就安装配置完了。  你可以在PowerShell或者CMD里输入命令 gcc -v。 如果显示结果如下图,则说明mingw配置成功。

windows10上利用 VSCode+MinGW + CMake安装编译openCV_第2张图片

4.安装CMake

首先下载CMake官网下载地址:https://cmake.org/download/

选择合适的版本进行下载,我的笔记本是64位系统,选择了 cmake-3.17.2-win64-x64.msi 。

下载完毕之后,双击进行安装,安装路径自己选择,值得注意的是:建议依然不要选择含有中文和空格的路径。

安装过程:双击打开 ----> 点击Next ----> 勾选“I accept this terms...",点击next ----> 选择"Add cmake to the system path for all users",勾选Create CMake desktop icon,点击 Next  ---->  选择安装路径(不要放在含有空格和中文的路径下),Next ----> Install,等待安装完毕。

到此CMake3.17.2 安装工作就以完成。 因为在安装过程中选择了自动添加环境,所以安装完后不用手动添加环境了。可以打开PowerShell或者CMD,输入命令'CMake' ,若出现以下类似信息,则说明安装成功。

windows10上利用 VSCode+MinGW + CMake安装编译openCV_第3张图片

若没有出现如上的信息,请尝试重启电脑再试。

准备工作已经完成,开始手动编译OpenCV 3.3.0。

1.先建一个文件夹用于存放编译后的文件。 我是把目录放在 opencv/build/x64下的,新建的文件名位为mingw。

2.双击桌面CMake图标,打开CMake。

windows10上利用 VSCode+MinGW + CMake安装编译openCV_第4张图片

在第一行:Whers is the source code :选择 opencv/source的存放路径。

在第二行:Whers to build the binaries: 选择你刚刚新建的,用于存放编译后文件的路径。

然后点击左下方的 Configure.

3.最对话框中的下拉列表,选择:MinGW Makefiles ,并且勾选Specify native compilers.

å¨è¿éæå¥å¾çæè¿°

点击Next,在新弹出的对话框中,C和C++分别选择 gcc.exe和g++.exe。

å¨è¿éæå¥å¾çæè¿°

4.设置完毕点击 Finish,耐心等待进度条读完,直到输出窗口看到 Configuring done

       在搜索框中, 输入world,勾选BUILD_OPENCV_WORLD。这个选项是指编译动态链接库的时候,把所有的动态链接库都编译到 一个链接库中去,这样在后面我们编译 包含调用到opencv的代码的时候,只需要链接这一个动态链接库。PS:当然,你也可以不勾选这个,只不过这样的话,在编译运行调用了opencv接口的代码的时候,可能需要指定多个动态链接库,因为opencv不同类型的接口是包含在不同的动态链接库中的。

然后情况搜索框内容,再次点击configure, 红色全部消失的时候,点击 Generate, 等待进度条读完,出现Generating Done。

至此,编译opencv的Makefile文件就生成了。 你可以在你新建的目录下,看到生成的Makefile文件。

5.开始编译。    进入到你刚刚新建的文件,按住shift,同时右击空白处,选择 "在此处打开PowerShell窗口",输入命令 :

mingw32-cmake           // 单线程编译,较慢
mingw32-cmake -j4       // 4线程编译,后边的数字根据你自己电脑的配置来指定

提醒:有的博主说使用多线程编译opencv会出现问题而且报错不明确,但我没遇到过。

           不过如果你时间不是很着急,可以使用单线程编译。

如果一切顺利的话,大概30分钟左右可以编译完成。

6.编译完成之后,在PowerShell / CMD窗口继续输入安装命令:

mingw32-cmake install

最后把编出来的 bin/ 文件夹的绝对路径添加到环境变量中去。

至此,opencv就已经全部完成编译和安装了。

然而,常常在第5步编译的时候,会报各种各样的错误。在这里,我把我编译过程中遇到的错误和剞劂办法,列举如下:

1.sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA 错误   表现如下:

...opencv/sources/modules/videoio/src/cap_dshow.cpp...
... 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope ...

MakeOpenCV_cap_dshow

解决方法:修改cap_dshow.cpp文件,以我的路径为例: D:\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,

#include "DShow.h"这行的上面加上  #define NO_DSHOW_STRSAFE 和 #define STRSAFE_NO_DEPRECATE,如下图所示:

windows10上利用 VSCode+MinGW + CMake安装编译openCV_第5张图片

 2. cmath:1157:11: error: '::hypot' has not been declared

   看源码可以看出导致问题出现的原因是:hypot 被某段代码重命名为了 _hypot,致使 cmath 调用  hypot 的时候无法找到

解决方法:修改Python.h的源码,在它的开头加上: #include "math.h"。

参考博客: https://blog.csdn.net/a3335581/article/details/68583030

3. MinGW编译OpenCV到 vs_version.rc.obj处出错

   具体表现如下:

modules/core/CMakeFiles/opencv_core.dir/build.make:1642: recipe for target `modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj' failed
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
CMakeFiles/Makefile2:1512: recipe for target `modules/core/CMakeFiles/opencv_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
Makefile:162: recipe for target `all' failed
make: *** [all] Error 2

解决方法:

1.检查自己的mingw是否安装在了一个路径中含有空格或者中文的路径下,如果是,需要把mingw目录放到一个不含空格和中文的路径下,并且重新配置其环境变量。

 2.如果不是 上面这个原因,请参考博客:https://www.jianshu.com/p/3c4b1af3837f

 

 

 

 

参考资料:

OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行_人工智能_辉哈-CSDN博客 https://blog.csdn.net/huihut/article/details/78701814

(一)MinGW-w64编译OpenCV-3.4.5 - 简书 https://www.jianshu.com/p/4e1f1edabfda

将 VSCode 打造成 OpenCV 的 IDE(C++,window10 1803)_人工智能_zhaiax672的博客-CSDN博客 https://blog.csdn.net/zhaiax672/article/details/88971248

【原创】cmath:1157:11: error: ::hypot has not been declared_Python_a3335581的博客-CSDN博客 https://blog.csdn.net/a3335581/article/details/68583030

Python写C/C++扩展时,编译报错:error: ::hypot has not been declared_python_limingaoyu的博客-CSDN博客 https://blog.csdn.net/limingaoyu/article/details/101424262

你可能感兴趣的:(人工智能)