注意:如果不需要使用SIFT和SURF等特殊的方法,直接安装opencv编译好的版本即可。
opencv都到4.x版本了,感觉还在使用2.x版本有些落后了,于是去试了试4.0.1,发现改动确实不少,并且一些算法因为专利或者未成熟的原因,不在发布的release版本中了,其中就包括SIFT和SURF,他们因为专利的原因不能用于商业,在2.x版本中,放在在nofree中,而3.x版本开始,这些方法被放入了opencv_contrib中,如果想使用需要自己编译到opencv中。 (当然VS2015也已经落后了,但是项目需要,不好去换啊,他们的编译方法差不多,可参考)
opencv开源项目在GitHub中,其中有各个版本的源码,地址是:
https://github.com/opencv
https://github.com/opencv
opencv的下载:
https://github.com/opencv/opencv
opencv_contrib的下载:
https://github.com/opencv/opencv_contrib
以下载opencv为例:
https://github.com/opencv/opencv
进入后,
第一步,选择左侧 Branch:Master,选择下面的Tags页面;
第二步,选择想要编译的版本,我这里选择 4.0.1;
第三步,选择 Clone or download 下载压缩包;
以相同方法下载 opencv_contrib 的压缩包(注意他们的版本应该相同,opencv 选了 4.0.1那么 opencv_contrib 也选 4.0.1)
GitHub 是外网下载起来很费劲,幸好不是很大,大家看人品,有可能中断,注意观察。。。
这里最好把我这个.cache文件下载下来 将.cache放在opencv源码的文件夹中(这个些文件是在CMake中需要下载的文件,由于是外网的原因很可能无法连接下载,所以直接用我下载的就好 )
win10 vs2015 opencv4.0.1 opencv_contrib4.0.1 CMake时下载的文件可以直接下载(目前测试opencv4.1.0的编译时也可用):
下载解压后直接放在opencv-4.0.1文件夹下 或 替换其中的 “.cache” 文件夹
CSDN下载:
链接:https://download.csdn.net/download/gordon_wei/10897688 (原来只需要一分现在涨到7分了,不是会员的小伙伴用百度云盘吧)
百度网盘:
链接: https://pan.baidu.com/s/1LVRsXv392blFIYS5058Z_A
提取码: s44s
opencv 在利用 vs 进行编译前需要使用 CMake 进行配置和生成 opencv 工程,然后在打开生成的工程进行 opencv 的 lib 和 dll 的生成。(要是已经有 CMake 了,版本不是太低的话可以用,要是版本低那最好先卸载低版本的,然后安装最新的 CMake)
CMake的下载:
https://cmake.org/download/
如上图,找个最新版本的安装包进行下载安装,我的系统是64位选择win64,安装没啥可说的运行后下一步…
第一步:
新建一个文件夹(最好别在C盘)命名你想要的名字,不要带中文,例如:opencv401,将 opencv 和 opencv_contrib 解压到该文件夹,注意解压后的文件夹点开后就是一系列子文件了,之后在opencv401中,新建文件夹,命名为opencv-build(当然你可以叫别的)如图:
(压缩包如果在这个文件夹下,用右键,解压到当前文件夹下)
第二步:
1.打开 CMake 首先选择源码路径,然后选择生成文件路径,源码路径就是刚解压好的opencv 源码文件夹 opencv-4.0.1 ,生成文件路径就是我们新建的 opencv-build 文件夹。
2.然后,点击Configure,进行配置;第一次配置会让我们选择编译项目所用的编译器,我是VS2015 64位 。然后就等他配置吧,时间还挺长,期间需要下载一部分东西,所以保持网络畅通。默默的等他配置完,下方会显示配置的结果,如果有红色的字,说明配置出现了错误,我配置时一个是关于Python,另外的错误是需要的文件没有下载成功(国内很容易不成功),这就需要你手动去下载其中需要的文件,后边说。
第三步:
第一次配置完会如下图,全是红色,下边的配置结果各位需要看好,是不是有什么别的错误,没有错误的话,字体是黑色,有错误的地方字体为红色,需要解决其错误,他会有描述,安描述寻找方法解决,如果是下载文件失败的问题,请看;
若没有错误 再次点击Configure;这时红色全变为白色,说明配置成功。
第四步:
到这里我们只加入了 opencv 的源码,还没有添加 opencv_contrib。现在进行添加。
首先,勾选 OPENCV_EXTRA_NONFREE项,否则在运行SIFT、SURF等函数时会报错 Error: The function/feature is not implemented (This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library) ;
其次,在OPENCV 中找到 OPENCV_EXTRA_MODULES_PATH 项,添加他的路径,他的路径是我们解压 opencv_contrib 夹下的 module 文件夹的路径。
最后,如果想之后生成的opencv的lib和dll包含在一个文件opencv_world.lib和opencv_world.dll内,需要找到 BUILD 将其下的 BUILD_opencv_world 选择上。
OK,现在再次点击 Configure
第五步:
第四步Configure结束后会如下图,再次点击Configure,如果全变成白色且输出栏没有错误,那么点击Generate,
结果显示
Configuring done
Generation done
则CMake部分结束,这时打开生成的项目,在我们自己建的opencv-build中有,opencv.sln,也可通过CMake 中的 Generate 按钮边上的 Open Project打开。
当打开了生成的opencv项目,可以选择想要生成的库文件的Debug版本或Release版本
默认是Debug版本
第一步:选择 CMakeTargets 中的 ALL_BUILD 或者 解决方案 Solution ‘OpenCV’,右键 ->生成,
第二步:生成结束如果没有失败的,在选择 INSTALL -> 右键 -> 仅当前项目 -> 只生成 INSTALL。
如果需要release版本,选择release版后 重复 第一步和第二步
当在 VS2015 完成了生成 INSTALL ,那么 opencv 的库就已经生成好了在我们的 opencv_build 文件夹下的 install 文件夹中,包括了 bin、etc、include、x64、文件夹 和一些文件,这就和官网提供的opencv包里build文件夹下一样的结构了,只是没有java和python文件,将install拷贝到其他地方 改个名 如 opencv401 就可以正常使用啦。
(官网release包安装后包含sources 和 build 两个文件夹,如果想与官网一致,先新建一个文件夹命名如 opencv401,在其下新建两个文件夹,分别为 sources 和 build ,将我们解压的 opencv 源码 opencv-4.0.1 中的文件中除了 .cache 文件夹全部拷贝到 sources 文件夹中,将我们刚编译生成的opencv_build\install下的文件全部拷贝到build文件夹下,这样我们编译的得到的opencv库就和官网发布的具有一致的结构了)
CMake Warning at cmake/OpenCVDownload.cmake:193 (message):
FFMPEG: Download failed: 7;“Couldn’t connect to server”
For details please refer to the download log file:
D:/CPP_Library/opencv401/opencv-build/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:200 (download_win_ffmpeg)
CMakeLists.txt:636 (include)
例如,在 CMake 的输出窗口出现 Download failed:错误,
1.如果因为断网原因发生,那么在连接上网络后 再次Configure。
2.如果网络良好,那么需要你手动去下载没有下载到的文件,下载连接在我们建立的 opencv_build 文件夹内的 CMakeDownloadLog.txt 这个里面有需要下载文件的信息,包括文件名、连接和下载状态。如:
#use_cache "D:/CPP_Library/opencv401/opencv-4.0.1/.cache"
#do_copy "opencv_ffmpeg.dll" "849286ccc527c99e5a218b67f13c6e8c"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"
"D:/CPP_Library/opencv401/opencv-build/3rdparty/ffmpeg"
这两句的意思是说将 opencv_ffmpeg.dll(它的md5签名是 849286ccc527c99e5a218b67f13c6e8c,下载地址是 “https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll” )
从 “D:/CPP_Library/opencv401/opencv-4.0.1/.cache” 拷贝到 "D:/CPP_Library/opencv401/opencv-build/3rdparty/ffmpeg"目录下。
#missing "D:/CPP_Library/opencv401/opencv-build/3rdparty/ffmpeg/opencv_ffmpeg.dll"
目标目录下没有此文件
#cmake_download "D:/CPP_Library/opencv401/opencv-4.0.1/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"
下载此文件到源代码路径 /.cache/ffmpeg/,并命名为"md5-文件名"
# timeout on name lookup is not supported
# Trying 151.101.108.133...
# TCP_NODELAY set
# connect to 151.101.108.133 port 443 failed: Connection refused
# Failed to connect to raw.githubusercontent.com port 443: Connection refused
# Closing connection 0
#
所以 直接利用没有下载的文件的下载连接去下载文件,然后重命名为"md5-文件名"的形式 如:849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll,放在 /.cache/ffmpeg/ 文件夹下面,或者直接放到目标路径 /3rdparty/ffmpeg/opencv_ffmpeg.dll(不用重命名)。
利用上面的方法,下载那些下载失败的文件,并放入到相应的文件夹下,再次进行 CMake 的 Configure
注意:
1、fmpeg_version.cmake 无法直接下载,而是直接打开了ffmpeg_version.cmake,可以右键网页选择另存为 ffmpeg_version.cmake.txt,然后再改为f710891525a04586d565d0e700e62a9c-ffmpeg_version.cmake。(这个名字根据你的提示的改,但估计opencv4.0.1都是这个)这里如果自己新建一个txt,然后直接将网页上的内容拷进去,然后再该后缀为.cmake是不行的,会提示md5不匹配。
2、不同版本的OpenCV对应的 opencv_ffmpeg.dll 等缺失文件的 md5 签名是不一样的
3、win10 vs2015 opencv4.0.1 opencv_contrib4.0.1 CMake时下载的文件可以直接下载:https://download.csdn.net/download/gordon_wei/10897688 下载解压后直接替换opencv-4.0.1文件夹中的 “.cache” 文件夹
具体请参考:https://www.cnblogs.com/huluwa508/p/10142718.html
只要发现了’ID3D11Multithread’: undeclared identifier 那么下边出现的一系列问题,包括LNK1104 cannot open file '…\lib\Debug\opencv_world401d.lib’等基本都是由它引起的。
我出现这个问题是由于 windows 10 SDK 版本低(10.0.10586.0版本),你可以在路径
C:\Program Files (x86)\Windows Kits\10\Include 下看到版本号
其中不包含所要用到的 ID3D11Multithread 。这时需要下载新版本的windows SDK(10.0.17134.0版本)
这里微软提供两种方法,
1.是下载安装win10的 windows 10 SDK
2.是通过VS进行安装 (VS2017 能够安装更高版本的 (10.0.17763.132))
下载地址:
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
下载后安装即可
如图:
这里需要注意,尽管有了新版本SDK,但是VS2015编译器默认还是使用了低版本,所以需要在VS中设置一下,首先,在 Class View(类视图) 窗口中(没有的在菜单 View(视图)中选择 Class View(类视图))选中所有的项目 (通过shift件 第一个和最后一个进行全选)后再项目上右键,打开Properties (属性)对话框,修改Target Platform Version (目标平台版本) 选择10.0.17134.0。
到此就完成了错误的修改,就可以从新生成opencv了,按照标题 4.的内容