OpenCV3.2+MINGW+SublimeText配置

目录

  1. 写在前面
  2. 环境要求
  3. 下载OpenCV Windows 版本代码
  4. 编译OpenCV并配置相关环境变量
  5. 用MINGW-GCC编译OpenCV程序
  6. 用bat脚本让编译更方便
  7. Sublime Text Build system文件编写
  8. 测试
  9. 拍拍手,庆祝一下23333

1. 写在前面

前几天在Visual Studio下成功配置了OpenCV,但是总感觉VS这玩意体积太大,启动速度也太慢了,如果仅仅只是为了临时写一个使用OpenCV的小程序用VS也未免大材小用(话说 VS2017 3月7日就要发布了,据说是大幅改进了启动速度和安装速度,到时候看看有木有明显改善),因为本人常用Sublime Text + GCC 组合,所以也打算在MINGW的基础上配置一下OpenCV.
【注意】此处对环境变量等基础概念以及对MINGW的安装以及基础配置不做阐释,不清楚的请自行查找相关资料。另外不要因为VS麻烦而选择MINGW,因为在这里可能会更麻烦,而且OpenCV最新版本中已经移除了MINGW的二进制包,具体原因不是很清楚,可能是有些地方有问题,所以此版本的配置仅仅作为小型的程序使用。

2. 环境要求

在继续之前,请确保你的电脑上安装并配置完成以下工具:

  1. MINGW 的相对较新的一个版本(推荐GCC 5.3.1以上)
  2. Cmake.(如果还没有安装可以到官网(https://cmake.org/)下载并安装)。
  3. Sublime Text 3

3.下载OpenCV 3.2 Windows版本的源代码

可以去OpenCV官网选择Windows版本下载(我下载的是这个(https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.2.0/opencv-3.2.0-vc14.exe/download),下载后是一个exe文件,同前面的教程,你可以选择直接用7-zip解压或者打开exe文件让他自行解压到指定的位置。,解压后就完成了。

4.编译OpenCV并配置相关环境变量

打开cmake-gui,源码文件选择/path/to/opencv/sources/目录,输出目录选择一个你新建的文件夹即可。
注意路径中不要出现中文、空格等字符,否则可能会出错。(另外cmake自己的路径也不要出现中文,否则会出错)
然后选择configure,如果在这个过程中出错,可以查看出错的部分,如果不是c++而是python之类的可以完全无视,取消掉这个选项即可(如果你要用python可以自行查资料解决问题,一般是一些依赖的问题),configure结束以后选择generate,然后就会在build目录下生成一个Makefile文件,打开控制台,cd到你的build目录,然后输入mingw32-make编译。(如果要多核心编译的话可以使用-jx选项,其中x是线程数),编译完成后输入mingw32-make install后所有的文件将会被提取到build目录下的install文件夹中,我们需要的就是这个文件夹里的东西。
ps:有一点需要注意的是我自己实测如果编译的代码使用github上的代码仓库里的代码编译会报错,而且一直没找到合适的解决方案。但是如果用发布的VS版的OpenCV里面附带的代码编译就没有问题。

把上面得到的install文件夹移动到一个合适的位置(在这里假定为opencvpath),然后添加opencvpath/x64/mingw/bin目录到path变量下,配置完成。

5. 用MINGW-GCC编译OpenCV程序

在编译经典的分水岭算法示例之前,我们需要先设置一下include目录和lib目录,在GCC的编译参数中可以使用-I 和 -L参数分别指定编译的默认包含目录以及库文件目录,用-l参数指定编译时需要连接的库文件,所以如果你要编译watershed.cpp这个文件,你需要在命令行输入的参数大概是这个样子的

g++ -Iopencvpath/include -Iopencvpath/include/opencv -Iopencvpath/include/opencv2 -Lopencvpath/x64/mingw/lib watershed.cpp -lopencv_calib3d320 -lopencv_core320 -lopencv_features2d320 -lopencv_flann320 -lopencv_highgui320 -lopencv_imgcodecs320 -lopencv_imgproc320 -lopencv_ml320 -lopencv_objdetect320 -lopencv_photo320 -lopencv_shape320 -lopencv_stitching320 -lopencv_superres320 -lopencv_video320 -lopencv_videoio320 -lopencv_videostab320

上面那个命令只是最简单的形式,还没有包含指定warnings等级以及优化等级和一些其他的选项。让我们来看一下这个命令,前面三个-I分别指定默认的include目录,-L指定lib目录,然后就是你要编译的watershed.cpp这个文件,后面一串-l是你需要链接的库(需要注意的一点是如果是你的opencvpath中含有空格需要用双引号把路径括起来否则会出错),当然如果你编译的是另一个版本的话这些库的名字可能有所不同(要知道这些库的名字,可以去lib目录下找后缀为.a的文件。把前面的lib去掉,后面的.dll.a去掉就是库的名字)。差不多使用这个繁琐的命令,编译就结束了。

6. 用bat脚本让编译更方便

从上面我们可以看出这样编译是非常繁琐的,所以我们要简化这一步骤,我们可以写一个bat来给gcc套一个壳来解决这个问题。在解决问题之前,我们需要了解几个环境变量。
GCC需要设置的环境变量是C_INCLUDE_PATH 和 CPLUS_IUNCLUDE_PATH,其中C_INCLUDE_PATH是针对C文件的,由于OpenCV新版本中貌似没找到C的支持,所以这一项可以先不用管。所以我们需要做的就是先set这两个变量,然后再调用g++,并在调用命令的末尾加上需要链接的库名,这样就可以了。
需要注意的一点是为了避免在一个终端中多次使用这个脚本造成的变量重复设置的情况,可以加一个简单的if判断来解决问题,下面是我写的脚本文件,具体路径可能有所不同,可以作为一个参考。


@echo off
if defined OPENCV_WITH_MINGW (
g++ %* -lopencv_calib3d320 -lopencv_core320 -lopencv_features2d320 -lopencv_flann320 -lopencv_highgui320 -lopencv_imgcodecs320 -lopencv_imgproc320 -lopencv_ml320 -lopencv_objdetect320 -lopencv_photo320 -lopencv_shape320 -lopencv_stitching320 -lopencv_superres320 -lopencv_video320 -lopencv_videoio320 -lopencv_videostab320
) else (
set OPENCV_WITH_MINGW=1
set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;C:\Program Files\OpenCV\OpenCV3.2.0_mingw\include\opencv;C:\Program Files\OpenCV\OpenCV3.2.0_mingw\include\opencv2;C:\Program Files\OpenCV\OpenCV3.2.0_mingw\include
set LIBRARY_PATH=%LIBRARY_PATH%;C:\Program Files\OpenCV\OpenCV3.2.0_mingw\x64\mingw\lib
g++ %* -lopencv_calib3d320 -lopencv_core320 -lopencv_features2d320 -lopencv_flann320 -lopencv_highgui320 -lopencv_imgcodecs320 -lopencv_imgproc320 -lopencv_ml320 -lopencv_objdetect320 -lopencv_photo320 -lopencv_shape320 -lopencv_stitching320 -lopencv_superres320 -lopencv_video320 -lopencv_videoio320 -lopencv_videostab320
)

保存这个bat文件取一个好听的名字(比如g++-cv.bat)然后放到path变量下的一个文件夹里即可。

7. Sublime Text Build system文件编写

这个没啥好说的tools->build system->new build system,然后写一个json文件,如果你以前写过的话应该很简单的。这里是我写的配置文件,仅作参考


{
	"shell_cmd": "g++-cv \"${file}\" -Wall -g -o \"${file_path}/${file_base_name}\"",
	"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
	"working_dir": "${file_path}",
	"selector": "source.c, source.c++",

	"variants":
	[
		{
			"name": "Run",
			"shell_cmd": "start cmd /C \"g++-cv \"${file}\" -Wall -g -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"&&pause\"",
		},

		{
			"name": "Run&Debug",
			"shell_cmd": "start cmd /C \"g++-cv \"${file}\" -Wall -g -o \"${file_path}/${file_base_name}\" && gdb \"${file_path}/${file_base_name}\"&&pause\"",
		},

		{
			"name": "Release",
			"shell_cmd": "start cmd /C \"g++-cv \"${file}\" -Wall -O3 -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"&&pause\"",
		},

		{
			"name": "Run-Release",
			"shell_cmd": "start cmd /C \"g++-cv \"${file}\" -Wall -O3 -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"&&pause\""
		}
	]
}

我保存的bat的名字是g++-cv.bat,所以可以看到调用的是g++-cv。

8.测试

打开watershed.cpp,build tools选择你新建的那个,然后ctrl+shift+B,选择run,如果成功运行就ok啦。(还是记得注意改一下文件中默认的图片文件路径)。

9.拍拍手,庆祝一下,就结束啦,然后干活去吧2333

233333

ps:本文写的仓促,可能有很多疏漏,如果你再配置过程中遇到问题可以在下面留言,也欢迎给我发邮件

psps:欢迎大大斧正!

发表评论

电子邮件地址不会被公开。 必填项已用*标注