windows下opencv的编译过程记录
项目需要在win下使用opencv的跟踪、字体等功能,需要编译opencv3.4.6,编译过程遇到一些问题,这里记录下,以供参考。

  1. 前期准备
    编译工具 :cmake3.9.2,vs2017;
    库:opencv3.4.6、opencv_contrib-3.4.6、freetype-2.10.2、harfbuzz-2.2.0
  2. 编译freetype
    直接使用vs2017打开cmake工程打开freetype,如下图,在1处选择管理配置,然后选择x64-Release:
    windows下opencv的编译过程记录
    选择完成后,会生成cmakesettings.json文件,修改2出内容为你的编译、安装目录、并添加编译选项。
    然后右击cmakelist.txt选择生成缓存,缓存生成结束后,右击cmakelist.txt选择生成、安装。
    结束后再你的安装目录存在include、lib、bin等编译的结果。
  3. 编译harfbuzz
    因opencv3.4.6的字体库要求依赖freetype和harfbuzz,并且依赖harfbuzz中的hb_tf.h。而使用上述编译freetype的方式编译生成的harfbuzz库并没有导出hb_tf.h及相关的函数。故这里需要对harfbuzz工程作出修改。修改如下:
    1)、使用cmake(cmake-gui),生成vs2017工程,注意生成的时候添加BUILD_SHAEED_LIBS选项。
    2)、打开生成的工程,如下图分别添加hb-ft.h及hb-ft.cc到Header Files和Source Files中:
    windows下opencv的编译过程记录
    3)、右击ALL_BUILD选择生成,即可。
    4)、生成结束检查lib中是否有hb_ft开头的函数。
  4. 编译opencv,使用cmake生成opencv工程,注意添加OPENCV_EXTRA_MODULES_PATH以指定opencv_contrib-3.4.6的目录。
    1)、编译过程中如果遇到失败的,视依赖情况选择是否依赖,不依赖则把该选项去除。如下图,去除cuda:
    windows下opencv的编译过程记录
    2)、检查编译选项,如果没有BUILD_opencv_freetype选项,需要添加该选项;
    3)、因cmake并不能通过find-pkg来发现freetype和harfbuzz,故修改opencv_contrib-3.4.6\modules\freetype\CMakeLists.txt文件如下:
    windows下opencv的编译过程记录
    4)、再次点击config,以配置工程。配置完成后,点击generate生成工程。
    5)、打开生成后的vs工程,编译。编译完成后,检查是否存在opencv-freetype是否存在。

vs中默认编码并非utf-8,使用时注意中文编码的问题。

相关文章: