【OpenCV】opencv4 + opencv_contrib 4 + VS2015-VS2019的编译

10 篇文章 1 订阅

opencv4 + opencv_contrib4 + VS2015的编译

注意:如果不需要使用SIFT和SURF等特殊的方法,直接安装opencv编译好的版本即可。

opencv都到4.x版本了,感觉还在使用2.x版本有些落后了,于是去试了试4.0.1,发现改动确实不少,并且一些算法因为专利或者未成熟的原因,不在发布的release版本中了,其中就包括SIFT和SURF,他们因为专利的原因不能用于商业,在2.x版本中,放在在nofree中,而3.x版本开始,这些方法被放入了opencv_contrib中,如果想使用需要自己编译到opencv中。 (当然VS2015也已经落后了,但是项目需要,不好去换啊,他们的编译方法差不多,可参考)

先发几个我配置好的版本吧

1.opencv 4.1.0 + opencv_contrib 4.1.0 + vs2015 + win10
CSDN链接:https://download.csdn.net/download/Gordon_Wei/12677895
百度网盘链接:https://pan.baidu.com/s/1RTG_0UdHawOEzTCty1S5KQ
提取码:opcv
2.
2.opencv 4.4.0 + opencv_contrib 4.4.0+ vs2019 + win10
CSDN链接:https://download.csdn.net/download/Gordon_Wei/12677888
百度网盘链接:https://pan.baidu.com/s/1nb7JkDN6bXR_O2arASiNmA
提取码:opcv
好消息SIFT专利到期,可以免费使用了。 OpenCV4.4.0中SIFT又回归主库了,cv::SIFT就能使用,不用再cv::xfeatures2d::SIFT了,SURF还在nofree中 相较于之前版本 头文件不在 #include <opencv2/xfeatures2d.hpp> 而在 #include <opencv2/xfeatures2d/nonfree.hpp>中

1.下载源码

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为例:

Sample

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

百度网盘:
链接: https://pan.baidu.com/s/19lzqHNhZikEwVrZBMSW92w&shfl=shareset
提取码: 2u3x

新增 opencv 4.4.0 + opencv_contrib 4.4.0+ vs2019 + win10 的 .cache
CSDN链接:https://download.csdn.net/download/Gordon_Wei/12680348

百度网盘链接:
https://pan.baidu.com/s/1ec4sU8xUOMsy4N5VQtsv6Q
提取码:opcv

2. CMake

opencv 在利用 vs 进行编译前需要使用 CMake 进行配置和生成 opencv 工程,然后在打开生成的工程进行 opencv 的 lib 和 dll 的生成。(要是已经有 CMake 了,版本不是太低的话可以用,要是版本低那最好先卸载低版本的,然后安装最新的 CMake)

CMake的下载:
https://cmake.org/download/

Sample

如上图,找个最新版本的安装包进行下载安装,我的系统是64位选择win64,安装没啥可说的运行后下一步…

3. 利用 CMake 配置生成 opencv 工程

第一步:
新建一个文件夹(最好别在C盘)命名你想要的名字,不要带中文,例如:opencv401,将 opencv 和 opencv_contrib 解压到该文件夹,注意解压后的文件夹点开后就是一系列子文件了,之后在opencv401中,新建文件夹,命名为opencv-build(当然你可以叫别的)如图:

(压缩包如果在这个文件夹下,用右键,解压到当前文件夹下)

第二步:
1.打开 CMake 首先选择源码路径,然后选择生成文件路径,源码路径就是刚解压好的opencv 源码文件夹 opencv-4.0.1 ,生成文件路径就是我们新建的 opencv-build 文件夹。

2.然后,点击Configure,进行配置;第一次配置会让我们选择编译项目所用的编译器,我是VS2015 64位 。然后就等他配置吧,时间还挺长,期间需要下载一部分东西,所以保持网络畅通。默默的等他配置完,下方会显示配置的结果,如果有红色的字,说明配置出现了错误,我配置时一个是关于Python,另外的错误是需要的文件没有下载成功(国内很容易不成功),这就需要你手动去下载其中需要的文件,后边说。

Sample

第三步:
第一次配置完会如下图,全是红色,下边的配置结果各位需要看好,是不是有什么别的错误,没有错误的话,字体是黑色,有错误的地方字体为红色,需要解决其错误,他会有描述,安描述寻找方法解决,如果是下载文件失败的问题,请看前边高亮部分或6.1中解决方法;
若没有错误 再次点击Configure;这时红色全变为白色,说明配置成功。

Sample

Sample

第四步:
到这里我们只加入了 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

Sample

Sample

Sample

Sample

第五步:
第四步Configure结束后会如下图,再次点击Configure,如果全变成白色且输出栏没有错误,那么点击Generate,
结果显示
Configuring done
Generation done
则CMake部分结束,这时打开生成的项目,在我们自己建的opencv-build中有,opencv.sln,也可通过CMake 中的 Generate 按钮边上的 Open Project打开。

Sample

Sample

4. 在VS2015中编译生成opencv库文件

当打开了生成的opencv项目,可以选择想要生成的库文件的Debug版本或Release版本
默认是Debug版本

第一步:选择 CMakeTargets 中的 ALL_BUILD 或者 解决方案 Solution ‘OpenCV’,右键 ->生成,
第二步:生成结束如果没有失败的,在选择 INSTALL -> 右键 -> 仅当前项目 -> 只生成 INSTALL。
如果需要release版本,选择release版后 重复 第一步和第二步

Sample

Sample

Sample

5. 大功告成

当在 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库就和官网发布的具有一致的结构了)

Sample

6. 错误及解决方法

6.1 CMake Configure 时 opencv_ffmpeg.dll 等文件下载失败

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

6.2 VS2015生成时 C2065 ‘ID3D11Multithread’: undeclared identifier 错误等; VS2015生成时 LNK1104 cannot open file '…\lib\Debug\opencv_world401d.lib’问题

只要发现了’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
下载后安装即可

如图:

Sample

这里需要注意,尽管有了新版本SDK,但是VS2015编译器默认还是使用了低版本,所以需要在VS中设置一下,首先,在 Class View(类视图) 窗口中(没有的在菜单 View(视图)中选择 Class View(类视图))选中所有的项目 (通过shift件 第一个和最后一个进行全选)后再项目上右键,打开Properties (属性)对话框,修改Target Platform Version (目标平台版本) 选择10.0.17134.0。
到此就完成了错误的修改,就可以从新生成opencv了,按照标题 4.的内容

Sample

  • 43
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 67
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏Gordon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值