【OpenCV】opencv4.0.1+opencv_contrib4.0.1+VS2015的编译

2023-12-10 12:48

本文主要是介绍【OpenCV】opencv4.0.1+opencv_contrib4.0.1+VS2015的编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

opencv4.0.1+opencv_contrib4.0.1+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开源项目在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/19lzqHNhZikEwVrZBMSW92w&shfl=shareset
提取码: 2u3x

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

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

如上图,找个最新版本的安装包进行下载安装,我的系统是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,另外的错误是需要的文件没有下载成功(国内很容易不成功),这就需要你手动去下载其中需要的文件,后边说。

第三步:
第一次配置完会如下图,全是红色,下边的配置结果各位需要看好,是不是有什么别的错误,没有错误的话,字体是黑色,有错误的地方字体为红色,需要解决其错误,他会有描述,安描述寻找方法解决,如果是下载文件失败的问题,请看;
若没有错误 再次点击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打开。

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

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

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

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) 
1
2
3
4
5
6
7
8
例如,在 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"  
1
2
3
4
这两句的意思是说将 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"
1
目标目录下没有此文件

#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"
1
2
下载此文件到源代码路径 /.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
    #
1
2
3
4
5
6
7
所以 直接利用没有下载的文件的下载连接去下载文件,然后重命名为"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
下载后安装即可

如图:

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


原文链接:https://blog.csdn.net/Gordon_Wei/article/details/85775328

这篇关于【OpenCV】opencv4.0.1+opencv_contrib4.0.1+VS2015的编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/477158

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

Verybot之OpenCV应用三:色标跟踪

下面的这个应用主要完成的是Verybot跟踪色标的功能,识别部分还是居于OpenCV编写,色标跟踪一般需要将图像的颜色模式进行转换,将RGB转换为HSV,因为对HSV格式下的图像进行识别时受光线的影响比较小,但是也有采用RGB模式来进行识别的情况,这种情况一般光线条件比较固定,背景跟识别物在颜色上很容易区分出来。         下面这个程序的流程大致是这样的:

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采