OpenCV CMake MSVC x86编译记录

一、背景

官方提供的OpenCV编译包是x64的,且没有集成contrib包中的功能,由于平时需要的是x86的OpenCV包,且想要使用contrib中的轮子,所以需要自行编译OpenCV。
为什么要用OpenCV的C++库而不用opencv_python,就是为了速度和工业化部署。OpenCV中主要的加速手段有:SIMD、IPP、OpenCL、CUDA、Halide,以及多线程并行。由于本人GPU相关功能全部不使用OpenCV实现,所以在编译时OpenCL、CUDA相关功能全部取消,而Halide现在OpenCV还没有实现,所以就剩下SIMD、IPP、多线程。幸运的是,这3种加速是可以叠加使用的。关于多线程parallel_for_并行后端,主要有Intel的TBB(需要单独安装)、OpenMP(只在MSVC下比较方便)、C++ 11 concurrency(C++11标准内置的并行库)、pthread(更适合Linux),由于平时基于C++ 17进行编程,所以这里直接使用C++ 11 concurrency(无需单独安装)。至于速度方面,TBB最快,其他框架本身都差不多。

二、下载相关附件

以OpenCV 4.5.2版本为例
(1)opencv-4.5.2-vc14_vc15.exe
(2)opencv_contrib-4.5.2.zip
(3)ippicv_2020_win_intel64_20191018_general.zip,这里使用无需单独安装IPP的IPPICV模式,需单独下载
(4)3rdparty:
<1>ada(可直接联网下载)
<2>face_landmark_model.dat,需单独下载
<3>FFmpeg相关,opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ffmpeg.cmake(注意这3个,尤其是最后一个)都要单独下载
<4>boostdesc相关,boostdesc_bgm.i、boostdesc_bgm_bi.i、boostdesc_bgm_hd.i、boostdesc_binboost_064.i、boostdesc_binboost_128.i、boostdesc_binboost_256.i、boostdesc_lbgm.i、vgg_generated_48.i、vgg_generated_64.i、vgg_generated_80.i、vgg_generated_120.i,都需要单独下载
<5>wechat_qrcode相关,detect.prototxt、sr.prototxt、detect.caffemodel、sr.caffemodel,都需要单独下载。
全部下载到手,就成功了90%。
可在CMake编译时,将:
ippicv.cmake中的"https://raw.githubusercontent.com/opencv/opencv_3rdparty/ I P P I C V C O M M I T / i p p i c v / " 修 改 为 : " h t t p s : / / r a w . s t a t i c d n . n e t / o p e n c v / o p e n c v 3 r d p a r t y / {IPPICV_COMMIT}/ippicv/" 修改为: "https://raw.staticdn.net/opencv/opencv_3rdparty/ IPPICVCOMMIT/ippicv/""https://raw.staticdn.net/opencv/opencv3rdparty/{IPPICV_COMMIT}/ippicv
以及ffmpeg.cmake、download_boostdesc.cmake、download_vgg.cmake、\opencv_contrib\modules\face\CMakeLists.txt、\opencv_contrib\modules\wechat_qrcode\CMakeLists.txt中的"https://raw.githubusercontent.com/"修改为"https://raw.staticdn.net/"即可。

三、CMake操作

(1)新建要构建生成文件所放置的文件夹,然后在CMake中进行相关操作
OpenCV CMake MSVC x86编译记录_第1张图片
(2)然后选择对应的VS的版本和系统版本(要根据自己的硬件架构进行选择:32位(Win32)兼容性好,64位(x64),arm架构的硬件要选arm(Arm64或Arm))。
OpenCV CMake MSVC x86编译记录_第2张图片
(3)点击Finish按钮,CMake自动开始编译。
然后得到如下界面:
OpenCV CMake MSVC x86编译记录_第3张图片
(4)先安装自己对功能模块的需求,勾选相关选项:
<1>java相关去掉;
<2>python相关去掉;
<3>test相关去掉;
<4>OpenCL和CUDA相关去掉;
<5>勾选OPENCV_ENABLE_NONFREE;
<6>在OPENCV_EXTRA_MODULES_PATH栏选中opencv_contrib对应的文件夹;
<7>勾选IPP相关;
<8>不勾选BUILD_opencv_world,生成各独立DLL文件,便于打包继承。
OpenCV CMake MSVC x86编译记录_第4张图片
点击CMake的Configure按钮,让CMake进行相关配置。
(5)配置3大加速
<1>SIMD,默认MSVC编译器+Intel芯片,则OpenCV提供的x86相关SIMD加速,全部自动扫描完成配置,无需手动操作,如果成功会在CMake的信息栏出现以下信息:
OpenCV CMake MSVC x86编译记录_第5张图片
<2>IPP,这里使用IPPICV的配置模式,首次点击Configure后,会在编译源文件夹下生成一个.cache文件夹,其下有个ippicv文件夹,是CMake从网上下载缓冲时生成的。需要将之前下载的ippicv_2020_win_intel64_20191018_general.zip,修改为该文件夹下对应的hash码加文件名的命名形式(要一模一样),然后替换掉原来大小为0的下载失败的文件即可,会在下次Configure时,恢复正常。
在这里插入图片描述
配置成功后会在CMake的信息栏出现以下信息:
OpenCV CMake MSVC x86编译记录_第6张图片

<3>多线程并行框架:使用MSVC>C++11版本,会自动选择配置,配置成功后会在CMake的信息栏出现以下信息:
OpenCV CMake MSVC x86编译记录_第7张图片
(6)配置3rdparty
按照前面的IPPICV的先命名后替换的方式,将
face_landmark_model.dat
opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ffmpeg.cmake
boostdesc_bgm.i、boostdesc_bgm_bi.i、boostdesc_bgm_hd.i、boostdesc_binboost_064.i、boostdesc_binboost_128.i、boostdesc_binboost_256.i、boostdesc_lbgm.i、vgg_generated_48.i、vgg_generated_64.i、vgg_generated_80.i、vgg_generated_120.i
detect.prototxt、sr.prototxt、detect.caffemodel、sr.caffemodel
替换掉在编译源文件夹下.cache文件夹中各对应子文件夹中的大小为0的下载失败的文件即可。
另由于boostdesc相关文件对这种方式可能出现问题(即CMake中上述方式会出现错误信息,且无法解决),将boostdesc_bgm.i、boostdesc_bgm_bi.i、boostdesc_bgm_hd.i、boostdesc_binboost_064.i、boostdesc_binboost_128.i、boostdesc_binboost_256.i、boostdesc_lbgm.i、vgg_generated_48.i、vgg_generated_64.i、vgg_generated_80.i、vgg_generated_120.i不用改名直接复制到D:\opencv_contrib-4.5.2\modules\xfeatures2d\src\文件夹下即可
OpenCV CMake MSVC x86编译记录_第8张图片
(7)多次点击Configure按钮,将编译区的红色部分全部刷成无色,再点击Generate按钮即可,成功后会在CMake的信息栏出现以下信息:
OpenCV CMake MSVC x86编译记录_第9张图片

四、MSVC操作

通过修改属性,以管理员身份启动MSVC打开OpenCV编译项目。
由于在该项目中,与编译速度和优化有关的MSVC选项:
OpenCV CMake MSVC x86编译记录_第10张图片
OpenCV CMake MSVC x86编译记录_第11张图片
OpenCV CMake MSVC x86编译记录_第12张图片
这些选项全部没有,所以不用担心,大胆进行傻瓜式编译生成操作。
先对ALL Build项目的Debug和Release分别生成,再对INSTALL项目的Debug和Release分别生成。
OpenCV CMake MSVC x86编译记录_第13张图片
此时在/build/install/文件夹中的文件,就是编译后所需要的所有文件。

五、有用文件提取和操作系统配置

MSVC编译成功后,主要有用的文件都在D:\sources\build\install\文件夹下面。将其中的bin、etc、include、x86四个文件夹复制出来即可,可如下图所示整理成一个文件夹,
OpenCV CMake MSVC x86编译记录_第14张图片
系统环境配置
右击电脑的“属性”选项,选择其中的“高级系统设置”,然后选择“环境变量”,在“系统变量”的“Path”栏中添加路径“D:\opencv\CV+contrib\install\x64\vc15\bin”,如下图所示:
OpenCV CMake MSVC x86编译记录_第15张图片
编写相关的用于MSVC的编译配置文件
opencv_debug_win32.props和opencv_release_win32.props

你可能感兴趣的:(OpenCV,opencv)