欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在Windows环境中使用VS2017编译OpenCV 4.2.0和opencv_contrib-4.2.0源代码,并支持TBB

最编程 2024-08-04 10:18:14
...

一、准备工作


cmake v3.15.7 x64:https://cmake.org/files/v3.15/


opencv-4.2.0: https://github.com/opencv/opencv/releases


opencv_contrib-4.2.0: https://github.com/opencv/opencv_contrib/releases


tbb-2019_U9: https://github.com/intel/tbb/releases


opencv分为x86和x64编译,VS2017

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|




二、VS2017编译TBB


去官网下载TBB的源码,解压,然后:


使用VS2017打开工程文件tbb-2019_U9\build\vs2013\makefile.sln,直接编译即可,分别编译x86和x64,生成动态库。



三、配置CMake的编译选项


去掉勾选 BUILD_DOCS、BUILD_EXAMPLES、BUILD_TESTS,为了节省时间


勾选WITH_TBB, 实现并行处理。不需勾选BUILD_TBB和MKL_WITH_TBB,这两项维持默认值即可。


F:\Machine Vision\OpenCV\source\opencv-4.2.0\modules\core\src\parallel.cpp里面有很多宏定义#if defined HAVE_TBB


如果不使能TBB的话,opencv-4.2.0自带并默认使用了微软的PPL并行库。#define HAVE_CONCURRENCY


编译平台对应关系是Visual Studio 2010(即宏 _MSC_VER = 1600)


#if defined _MSC_VER && _MSC_VER >= 1600
    #define HAVE_CONCURRENCY
#endif
/* IMPORTANT: always use the same order of defines
   - HAVE_TBB         - 3rdparty library, should be explicitly enabled
   - HAVE_HPX         - 3rdparty library, should be explicitly enabled
   - HAVE_OPENMP      - integrated to compiler, should be explicitly enabled
   - HAVE_GCD         - system wide, used automatically        (APPLE only)
   - WINRT            - system wide, used automatically        (Windows RT only)
   - HAVE_CONCURRENCY - part of runtime, used automatically    (Windows only - MSVS 10, MSVS 11)
   - HAVE_PTHREADS_PF - pthreads if available
*/
#if defined HAVE_TBB
    #include "tbb/tbb.h"
    #include "tbb/task.h"
    #include "tbb/tbb_stddef.h"
    #if TBB_INTERFACE_VERSION >= 8000
        #include "tbb/task_arena.h"
    #endif
    #undef min
    #undef max
#elif defined HAVE_HPX
    #include <hpx/parallel/algorithms/for_loop.hpp>
    #include <hpx/parallel/execution.hpp>
    //
    #include <hpx/hpx_start.hpp>
    #include <hpx/hpx_suspend.hpp>
    #include <hpx/include/apply.hpp>
    #include <hpx/util/yield_while.hpp>
    #include <hpx/include/threadmanager.hpp>
#elif defined HAVE_OPENMP
    #include <omp.h>
#elif defined HAVE_GCD
    #include <dispatch/dispatch.h>
    #include <pthread.h>
#elif defined WINRT && _MSC_VER < 1900
    #include <ppltasks.h>
#elif defined HAVE_CONCURRENCY
    #include <ppl.h>
#endif

勾选OPENCV_ENABLE_NONFREE,如果没有勾选,那么类似SIFT这种已经被申请专利的方法就无法使用。


搜索OPENCV_EXTRA_MODULES_PATH

然后在value中填入源码包opencv_contrib解压目录中的modules路径(注意:此处路径的反斜杠\要改成正斜杠/,反斜杠\有转义字符的意思)。

错误的 F:\Machine Vision\OpenCV\source\opencv_contrib-4.2.0\modules

正确的 F:/Machine Vision/OpenCV/source/opencv_contrib-4.2.0/modules


可选项,默认已勾选 BUILD_SHARED_LIBS,取决于你想把库编译为动态库还是静态库,我在本篇教程使用默认值:动态库(已勾选)


可选项,默认未勾选 BUILD_opencv_world,取决于你是否想把所有的dll动态库都整合为1个文件,我在本篇教程使用默认值,没勾选


以上配置选项准备完毕后,点击按钮“Configure”。



四、下载ipp和ffmpeg文件


点击按钮“Configure”之后,准备过程会下载以下几个文件:


ippicv_2019_win_ia32_20180723_general.zip


opencv_videoio_ffmpeg.dll


opencv_videoio_ffmpeg_64.dll


ffmpeg_version.cmake


这几个文件下载完,会分别存储在路径:


opencv-4.2.0\.cache\ippicv

opencv-4.2.0\.cache\ffmpeg


cmake configure过程的输出日志是:


opencv-4.2.0\build_x86\CMakeDownloadLog.txt


如果上述文件下载失败,CMake会红色字体报错,打开日志CMakeDownloadLog.txt,可以看到:


https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_win_ia32_20180723_general.zip

https://raw.githubusercontent.com/opencv/opencv_3rdparty/a66a24e9f410ae05da4baeeb8b451912664ce49c/ffmpeg/opencv_videoio_ffmpeg.dll

https://raw.githubusercontent.com/opencv/opencv_3rdparty/a66a24e9f410ae05da4baeeb8b451912664ce49c/ffmpeg/opencv_videoio_ffmpeg_64.dll

https://raw.githubusercontent.com/opencv/opencv_3rdparty/a66a24e9f410ae05da4baeeb8b451912664ce49c/ffmpeg/ffmpeg_version.cmake

#check_md5 "F:/Machine Vision/OpenCV/source/opencv-4.2.0/.cache/ippicv/0157251a2eb9cd63a3ebc7eed0f3e59e-ippicv_2019_win_ia32_20180723_general.zip"

#check_md5 "F:/Machine Vision/OpenCV/source/opencv-4.2.0/.cache/ffmpeg/5de6044cad9398549e57bc46fc13908d-opencv_videoio_ffmpeg.dll"

#check_md5 "F:/Machine Vision/OpenCV/source/opencv-4.2.0/.cache/ffmpeg/55c0bc8ad27db00116fabf06508de196-opencv_videoio_ffmpeg_64.dll"

#check_md5 "F:/Machine Vision/OpenCV/source/opencv-4.2.0/.cache/ffmpeg/ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake"

opencv-4.2.0\build_x86\3rdparty\ffmpeg

opencv-4.2.0\build_x86\3rdparty\ippicv

日志记录了需要下载的url,和它们对应的MD5值。可以自己打开网址下载文件,然后重命名为


0157251a2eb9cd63a3ebc7eed0f3e59e-ippicv_2019_win_ia32_20180723_general.zip


5de6044cad9398549e57bc46fc13908d-opencv_videoio_ffmpeg.dll


55c0bc8ad27db00116fabf06508de196-opencv_videoio_ffmpeg_64.dll


ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake


此外,以下文件也是需要下载的,网址在CMakeDownloadLog.txt都有描述。


boostdesc_bgm.i

boostdesc_bgm_bi.i

boostdesc_bgm_hd.i

boostdesc_lbgm.i

boostdesc_binboost_064.i

boostdesc_binboost_128.i

boostdesc_binboost_256.i

vgg_generated_120.i

vgg_generated_64.i

vgg_generated_80.i

vgg_generated_48.i

这里附上我自己下载成功的文件,如果读者下载失败,可以使用我的。[见文章末尾附件]



五、配置CMake的TBB头文件和库


经过前面步骤的Configure,搜索TBB_,会有TBB的选项跑出来,需要填写:(截图仅举例x86的情况,x64一样)


image.png


x86


F:/Machine Vision/OpenCV/source/tbb-2019_U9/include

F:/Machine Vision/OpenCV/source/tbb-2019_U9/build/vs2013/Win32/Release/tbb.lib

F:/Machine Vision/OpenCV/source/tbb-2019_U9/build/vs2013/Win32/Debug/tbb_debug.lib

F:/Machine Vision/OpenCV/source/tbb-2019_U9/include/tbb/tbb_stddef.h


x64


F:/Machine Vision/OpenCV/source/tbb-2019_U9/include

F:/Machine Vision/OpenCV/source/tbb-2019_U9/build/vs2013/x64/Release/tbb.lib

F:/Machine Vision/OpenCV/source/tbb-2019_U9/build/vs2013/x64/Debug/tbb_debug.lib

F:/Machine Vision/OpenCV/source/tbb-2019_U9/include/tbb/tbb_stddef.h


执行Configure,再次执行Configure(因为TBB_VER_FILE字段此时才跑出来),然后Generate,最后Open Project,打开VS工程...


源码F:\Machine Vision\OpenCV\source\opencv-4.2.0\build_x86\cvconfig.h,可以看到宏HAVE_TBB已定义!


/* Intel Threading Building Blocks */

#define HAVE_TBB


六、VS-生成-批生成


1、\opencv-4.2.0\build_x86\OpenCV.sln


2、\opencv-4.2.0\build_x64\OpenCV.sln


image.png



七、附件


1、编译opencv-4.2.0需要的opencv_videoio_ffmpeg.dll,opencv_videoio_ffmpeg_64.dll


https://download.****.net/download/libaineu2004/12150698


2、tbb-2019_U9源码和vs2017编译生成的库


https://download.****.net/download/libaineu2004/12150701


3、opencv-4.2.0编译的库文件和测试案例


https://download.****.net/download/libaineu2004/12150708







---


参考文献


https://blog.****.net/weijifen000/article/details/93377143


https://blog.****.net/gggttt222/article/details/79482033

————————————————

版权声明:本文为****博主「libaineu2004」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.****.net/libaineu2004/article/details/104252289

推荐阅读