一、背景
官方提供的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/IPPICVCOMMIT/ippicv/"修改为:"https://raw.staticdn.net/opencv/opencv3rdparty/{IPPICV_COMMIT}/ippicv/" 修改为: "https://raw.staticdn.net/opencv/opencv_3rdparty/IPPICV