最近需要使用VS+OpenCV去做一些图像处理的工作,才发现OpenCV3.0之后将一些图像处理算法单独放到扩展库OpenCV_contrib中,如果要使用需要重新编译,尝试在网上下载别人编译好的资源,结果要么是版本太旧,要么是编译的结果没有继集成到world.dll中,造成一大堆的生成文件,也不方便使用。所以就自己查了些资料,然后重新编译了几个版本,其中也出现一些问题,值得引以为鉴。 重编译版本:
环境:win10_x64;OpenCV版本:4.1.1;OpenCV_contrib版本:4.1.1;VS版本:2015/2017。编译好的下载链接在文末。
该模块是opencv3.0版本时候单独整出来的一个扩展库,把一些因为版权问题或算法不成熟的一些图像处理算法整合在一起,其中就包括了在做图像处理过程中常常用到的特征检测特征匹配算法:SIFT、SURF等;还有一些GPU的使用算法和最新的深度学习中常用的如人脸识别算法等。因此我们需要进行一些图像研究类工作时,需要这些集成好的算法去简化我们的代码编写过程。而opencv_contrib的使用需要对opencv进行重编译,在重编译的过程中加入opencv_contrib库,这样得到的编译文件就可以像3.0之前的版本那样使用了,当然其中一些函数的使用会有变化,对于参考了2.x版本代码的同学,请参考新版opencv的一些说明文档进行更改。如果实在不想麻烦,也可以去下载使用旧版(2.x)的opencv。(强迫症的我当然要使用最新的了)
目前opencv的最新版是4.1.1,官方下载同样没有contrib库,需要我们进行重编译,需要的材料如下:
opencv 软件包或源代码;opencv版本对应的contrib扩展库;Cmake;VS2015/VS2017。 这里因为我需要VS2017版本编译文件自己使用,也需要VS2015版本的编译文件给他人共同使用,所以我两个版本都进行了编译。如无必要,同学们可以自行选择,建议使用新版VS编译新版OpenCV。请到官方资源中下载:
OpenCV 4.1.1: https://opencv.org/releases/;OpenCV_contrib 4.1.1:https://github.com/opencv/opencv_contrib/releases;Cmake:https://cmake.org/download/;VS2015/VS2017 :自行搜索下载,不过既然要用到,想必是已经有了。where is the source code : 源代码路径; where to build the binaries: 生成的工程保存路径;
点击Configure,弹出对话框,选择编译工程的平台。我选的是64位的VS2017(先进行2017版本的编译)
点击Finish,会自动进行配置,如下如所示: 第一次配置会下载一些资源,比如ffmpeg,ippv等,这个可能会出现问题,取决于你的网速,如果网速不行,就会出现如下结果: 说错了,这个还算好的了,出现问题,但是配置完成了,拉上右边的滑动条,看看哪里出现问题: 果然就是ffmpeg的下载超时了,这里有两种解决办法:
1 再次点击configure,会再次进行配置,其中之前一次下载好的会自动检测到跳过,所以会接着上次的没下载完的继续下载,如果你的网速还算可以,那么可以用这个方法,一次不行,就多试几次,总能下载完;2 第二种方法是我们自己下载好那个卡壳的文件,放在目标文件夹中的cache文件夹中,具体的可以看目标工程文件夹中的CMakeDownloadLog.txt,其中会把哪里那个文件下载出错写明,也会写明要把文件下载到哪个文件夹,以及复制到哪个文件夹(这里的复制过程会加上MD5校验码),具体的大家可以参考别人的链接,上就有;我这里因为只有这一个出问题,所以我采用了第一种办法,所幸第二次配置下载时下载好了,结果就是: 这里因为我勾选了Grouped和Advanced,所以配置好的参数是分组显示的,大家在配置时,如果出现问题会显示红色,一般都可以通过多次点击Configure,自动完成配置,直到没有红色出现。
这一步就是添加扩展库的步骤,同时也会配置些VS编译时的参数;主要做3步:
勾选 BUILD_opencv_world;——这样编译的结果会生成单个文件world.dll,否则会有很多dll文件,在实际使用配置时会比较麻烦;配置contrib的路径;——选择到之前下载的contrib文件加压后的文件夹中modules文件夹;勾选 OPENCV_ENABLE_NONFREE;——参考其他人的有说不选择这个会编译出错(使用中出错),但是也有没勾选的,所以保险起见,我这里也勾选了;如下图所示: 完成这3步之后,再次点击Configure按钮,这次会包含contrib库进行配置,也是一样会根据库中的代码需求进行一些下载: 可以看到,这里也出现错误,再次拖动滑动条,看看是哪里出错了: 是一个面部标志模板的下载超时,一样的处理方式,再次点击Configure按钮,会继续进行下载,结果:
点击Generate按钮,即可生成VS工程: 到此,结束CMake的部分,当然其中也出现过其他问题(我会将遇见的问题以及解决方法放到文末)。
目标:编译生成对应平台环境的库文件。——vs2017 x64(Debug & Release) 整个编译过程主要分为两步:
1 选择平台Debug或Release,右键项目名称,选择“生成解决方案”,等待生成完成;2 右键CMake Targets 中的INSTALL,选择“仅用于项目->仅生成INSTALL”;生成库文件;此时在工程路径文件夹中的install目录下,生成了调用dll的全部内容。使用方式与我们使用官方文件时一样,此处不做介绍了。
这里仅仅列举我之前遇到的问题,仅供参考。
CMake配置始终无法通过,查看原因,提示是CMakeLists.txt 文本首行出错,这里没有截图,不好描述; 解决方式:因为说是首行出错,怀疑是文件头信息出错,但是官方下载的文件不可能出问题,结果发现是因为电脑中有加密软件,对于txt文件都进行了加密,改变了文件头信息,使Cmake无法使用该文件。所以只要进行解密,或者用没有加密的电脑去配置就好;Cmake配置时,下载出错; 解决方式: 1 再次点击configure,会再次进行配置,其中之前一次下载好的会自动检测到跳过,所以会接着上次的没下载完的继续下载,如果你的网速还算可以,那么可以用这个方法,一次不行,就多试几次,总能下载完;2 第二种方法是我们自己下载好那个卡壳的文件,放在目标文件夹中的cache文件夹中,具体的可以看目标工程文件夹中的CMakeDownloadLog.txt,其中会把哪里那个文件下载出错写明,也会写明要把文件下载到哪个文件夹,以及复制到哪个文件夹(这里的复制过程会加上MD5校验码),具体的大家可以参考别人的链接,上就有; VS编译时出现大量错误 问题原因:但是使用的是VS2015进行编译的,配置时使用的是最新版的CMake,这样会要求你编译时需要使用新版的系统文件,而VS2017会自带该文件,所以使用VS2017就不会出现该问题,否则你也可以自己下载系统更新文件,安装后重新编译;几个建议:
版本对应,具体来说是Opencv版本对应contrib的版本,这个自己在Github上下载时注意一下;Cmake与VS的版本对应,新版的Cmake往往要求新的系统文件,但是我在官网上没有找到很早期的Cmake版本,所以建议使用安装新版VS,也就是VS2017进行使用,如果要配置,再安装VS2015也行(我就是这样干的-_-)。Win10 + x64环境: VS2017+opencv4.1.1+contrib (Debug/Release)+world.dll :https://download.csdn.net/download/u010080605/11468341 VS2015+opencv4.1.1+contrib (Debug/Release)+world.dll :https://download.csdn.net/download/u010080605/11468347