opencv是一个开源跨平台的计算机视觉库,使用C,C++编写轻量且高效可以运行在Linux、Windows、Android和Mac OS操作系统上,他实现了图像处理和计算机视觉方面的很多通用算法(具体的请查阅相关资料了解),很强大 模块也很多,官方也提供了windows上编译好的二进制包,但核心模块偶有不满足需求的情况,这时就需要自行编译扩展模块使用,此篇就是给需要自行编译的同学一些参考。

获取OpenCV和OpenCV_contrib源代码,结合这个一起:https://segmentfault.com/q/1010000045375113

编译前需要的环境准备

opencv的编译还是有点麻烦,需要支持的模块越多就相对就越麻烦,以下就是编译前需要的一些环境搭建,此篇主要对java版搭建,所以其他版本搭建请仅供参考,较麻烦的环境搭建我会贴上参考链接:

  1. java环境,需要编译后对java支持这里就必须要有,这个环境部署方式就不多说了;
  2. cmake安装,windows安装带gui的版本,因为有一些编译配置可视化的选择还是比命令的方式选择方便,这个安装很简单,下载解压后将bin目录添加到PATH环境变量中就可以了;
  3. python环境,生成opencv_java412.jar文件必须要有,否则不会生成,之前以为不需要对python支持就没安装python,结果反复编译几次,cmake配置反复修改都没生成java相关目录,最后发现问题在这里,也算是踩了个小坑,windows搭建可以直接在python官方(https://www.python.org/downloads/windows/)下载安装文件安装;
  4. emscripten(可选,添加opencv_js的生成)安装Emscripten之前须先安装python具体的方式参考这个(https://www.cnblogs.com/tonghaolang/p/9253719.html);
  5. ant,ant不安装的话也是不会生成java相关支持的,ant的环境搭建也很简单,这里就不说相关参考了;
  6. visual studio 2019安装,版本随意我这里使用的2019,主要cmake环境准备后编译需要,不安装的话直接运行cmake-gui点configure时会提示没有编译器。

拉取opencv,opencv_contrib源码

opencv源码只包括主要部分,contrib是扩展的部分模块,包含人脸识别和训练等模块。
使用git命令拉取,拉取当前最新4.1.2版本,github上opencv每个版本发布对应放出的tag一定要区分,不然拉到master和contrib版本不同编译可能会出错,因为master上是官方实时提交的源码,可能他刚更改完提交你拉取后contrib部分还没有调整好编译就会出错,这里再说一个小坑,之前拉取没注意到分支问题,拉取的master的contrib编译,当时正好cv中还有部分代码没提交编译后一直提示错误,才发现头文件缺少,还坑了好几个小时。
opencv:git clone --branch 4.1.2 https://github.com/opencv/opencv.git
opencv_contrib:git clone --branch 4.1.2 https://github.com/opencv/opencv_contrib.git

cmake相关参数配置

源码拉取完成后运行cmake-gui,按照下图选择好相关路径:

目录选择后点击Configure配置相关生成项目的生成器,这里选择安装的vs2019

选择好后点击finish后cmake就会下载相关需要的dll和zip包,中途可能会出错或者下载文件失败,请留意日志,如果有相应包下不下来,我这里打了一个该需要的缓存包(注意这个缓存包并非通用缓存包,只是4.1.2版本的,如果使用其他版本,则这里的缓存包不一定能用),网盘下载下来解压放在opencv源码根目录的.cache文件夹中,如下:
网盘地址:https://pan.baidu.com/s/1W5oC2HJcVxa9If0sHd4cxg 提取码: qng8

放好缓存包位置后再次点击configure重新准备,如果完成没有异常日志则如下出现Configuring done则完成(如果还是有问题,则把上面那个编译输出目录清空重新运行cmake再点congfigure)。

如上配置完成日志,最后可以看到Java相关环境目录,如果ant安装后这里没有显示路径,则在上面的红色框中搜索ant如下选择ant

如果Java wrappers提示为NO,则可能是python环境没有弄好,如果继续,则不能生成java相关包支持,这里一定要重新检查python是否安装好。
以下是java要选的一些参数:

如果不要python支持则可以取消python相关的,如下:

需要js支持则需要勾选js,如下:

BUILD_SHARED_LIBS去掉勾选,这个作用是让生成的opencv_java412.dll都在一个dll中,否则会根据所选模块分开dll,根据自己的需要进行是否勾选吧,如下:

opencv生成dll库,默认是将所有模块都单独生成dll,或lib,如果想将所有合成一个dll,则参数:BUILD_open_world勾选,注意!这个勾选后将不能生成java相关的支持,如果还需要sift相关算法支持,则还需要勾选OPENCV_ENABLE_NONFREE选项,如下:

以上参数勾选完成后则点击Generate第一次生成项目,如下完成:

第一次完成后,发现开头有一行日志提示没有Emscripten,如下:

则需要如下选择目录:
目录添加后再如下图添加opencv_contrib扩展人脸匹配等模块添加:

第二次完成后如果日志没有异常则生成完成,点击Open Project从vs2019中打开项目,如果不能打开,则找到输出目录下OpenCV.sln文件,通过vs打开,如图切换发布类型为Release,x64再在解决方案资源窗口上选中右键重新生成解决方案:

编译完成如下进行最后的操作:

完成后进入install目录为:

最后需要的java目录为:

jar包及opencv_java412.dll中就包含了人脸验证及训练等相关模块。

写在最后

从linux上编译opencv差不多,只不过把cmake gui的方式换成命令操作。

______________人生的一手好牌,被自己打得稀烂 。