windows下编译OpenCV带opencv_contrib和freetype

1. 下载安装cmake、opencv

cmake下载地址:https://cmake.org/download/
opencv下载地址:https://opencv.org/releases/
opencv_contrib下载地址:https://github.com/opencv/opencv_contrib/releases

由于国内访问GitHub不稳定,使用Github下载的源码编译会出现很多资源下载失败而导致编译失败的问题。所以可以使用国内的opencv镜像,地址为:
opencv : https://gitcode.net/opencv/opencv
opencv_contrib:https://gitcode.net/opencv/opencv_contrib
详细说明参考此文章:《下载不再卡顿,OpenCV中国镜像启用》

其中,opencv_contrib的版本要与opencv的版本一致
本文编写时,最新版本为opencv4.5.2,因此我下载的版本为opencv4.5.2和opencv_contrib4.5.2

双击下载的opencv的exe文件,执行的是解压操作,选择一个目录解压即可,然后把opencv_contrib也解压到相同的目录:
解压目录
opencv本身自带编译了visual studio 2015 和 visual studio 2017 版本的64位的库,在build目录中可以直接使用了。
但是如果要32位的库,或者需要SURF、SIFT等算法,就需要编译opencv_contrib库

2. 编译freetype和harfbuzz

若要使用putText在图片中添加中文汉字,则需要编译freetypeharfbuzz,若没有中文汉字的需求,则这个目录下的内容忽略,直接跳到目录 -> 3.编译Opencv
如果使用的是OpenCV5.0及以上版本,也可忽略此节内容,因为从OpenCV5.0开始支持putText()写中文了。

下载pkg-config: https://sourceforge.net/projects/pkgconfiglite/
下载freetype: https://download.savannah.gnu.org/releases/freetype/
下载harfbuzz: https://github.com/harfbuzz/harfbuzz

2.1 pkg-config

解压后添加bin目录到系统PATH环境变量

2.2 freetype

在这里插入图片描述
再次Configure, 然后点击Generate, 完成后,点击 Open Project 按钮,打开VS,编译。
VS里ALL_BUILD, INSTALL. 会在构建文件夹的install目录下生成所需的include和lib

然后添加环境变量:FREETYPE_DIR
在这里插入图片描述

2.3 harfbuzz

在这里插入图片描述
设置好上面两项后,再次点击Configure按钮

在这里插入图片描述
2021/04/30修改,上图中 FREETYPE_INCLUDE_DIR_ft2build 应填 D:/DevelopmentTools/freetype-2.10.0/install/include, 上图少了include目录

填上freetype的相关路径,再次Configure, 然后点击Generate, 完成后,点击 Open Project 按钮,打开VS,编译。
VS里ALL_BUILD, INSTALL. 会在构建文件夹的install目录下生成所需的include,和lib
编译的lib,debug和release的名字是一样的,可以先把Debug和Release都编译出来,先编译Debug版本的INSTALL,等opencv的Debug版本编译完了,再编译Release版本的INSTALL,然后编译Release版本的Opencv
编译完成后, 设置环境变量
在这里插入图片描述

2.4 修改opencv_contrib下的modules/freetype/CMakeLists.txt

改为如下:

set(the_description "FreeType module. It enables to draw strings with outlines and mono-bitmaps/gray-bitmaps.")
 
find_package(Freetype REQUIRED)
 
# find_package(HarfBuzz) is not included in cmake
set(HARFBUZZ_DIR "$ENV{HARFBUZZ_DIR}" CACHE PATH "HarfBuzz directory")
find_path(HARFBUZZ_INCLUDE_DIRS
    NAMES hb-ft.h PATH_SUFFIXES harfbuzz
    HINTS ${HARFBUZZ_DIR}/include)
find_library(HARFBUZZ_LIBRARIES
    NAMES harfbuzz
    HINTS ${HARFBUZZ_DIR}/lib)
find_package_handle_standard_args(HARFBUZZ
    DEFAULT_MSG HARFBUZZ_LIBRARIES HARFBUZZ_INCLUDE_DIRS)
 
if(NOT FREETYPE_FOUND)
  message(STATUS "freetype2:   NO")
else()
  message(STATUS "freetype2:   YES")
endif()
 
if(NOT HARFBUZZ_FOUND)
  message(STATUS "harfbuzz:   NO")
else()
  message(STATUS "harfbuzz:   YES")
endif()
 
if(FREETYPE_FOUND AND HARFBUZZ_FOUND)
  ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES} WRAP python)
  ocv_include_directories(${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS})
else()
  ocv_module_disable(freetype)
endif()

3. 编译OpenCV

配置cmake
配置cmake
点击finish后,开始configure,如果有很多爆红的地方,可以参考文章《opencv_contrib安装笔记
或者使用国内opencv镜像进行编译(爆红的地方都是下载失败的问题,由于github在国内访问困难,使用国内gitcode仓库的代码库,会自动从国内镜像下载。具体参考此文章:《下载不再卡顿,OpenCV中国镜像启用》

爆红解决后,配置config:
(1)勾选 OPENCV_ENABLE_NONFREE 项,否则在运行SIFT、SURF等函数时会报错
(2)设置 OPENCV_EXTRA_MODULES_PATH 项,填入opencv-contrib的目录下的modules目录
(3)勾选 BUILD_opencv_world 项,如果需要把生成的opencv的lib和dll包含在一个文件opencv_world.lib和opencv_world.dll内则需要勾选,否则不用勾选
(4)勾选 WITH_FREETYPE 项,支持中文文字putText,但是要支持这一项,则必须先编译freetype和harfbuzz
(5)如果需要支持freetype,则需要在Opencv的Cmake配置中加入freetype的相关路径
在这里插入图片描述

2021/04/30修改,上图中 FREETYPE_INCLUDE_DIR_ft2build 应填 D:/DevelopmentTools/freetype-2.10.0/install/include, 上图少了include目录

搜索一下harfbuzz,还要填入harfbuzz的相关目录和库文件,如下图图中的路径和上面的不一样,因为这是后面又补充的)
在这里插入图片描述


填好后,再次在Cmake界面,点击 configure, 确定没报错后,点击 Generate,最后点击 Open Project,打开Visual studio,找到 ALL_BUILD 右键Build, 等待编译完成后, 找到 INSTALL 右键 Build

5. 示例


#include "opencv2/opencv.hpp"
#include "opencv2/freetype.hpp"

#include <iostream>

int main()
{
	cv::Mat img(200, 300, CV_8UC3, cv::Scalar(255, 255, 255));

	cv::Ptr<cv::freetype::FreeType2> freeType;
	freeType = cv::freetype::createFreeType2();
	freeType->loadFontData("C:/Windows/Fonts/simsun.ttc", 0);	// 加载字体文件,宋体

	// 在图片中显示带中文的文字
	freeType->putText(img, "测试 hello world!", cv::Point(10, 30), 20, cv::Scalar(255, 0, 0), 1, 8, true);

	cv::imshow("test", img);
	cv::waitKey(0);
	return 0;
}

执行显示效果:
在这里插入图片描述
但是,在Visual Studio工程中编译上面c++代码,运行显示的结果中没有“测试”这两个汉字,只有 “hello world”, 因为Visual Studio的文件编码格式不是utf-8, 需要这样设置:

(1)修改文件编码格式,在VS工具栏中选择File -> Advanced Save Options(高级保存选项),如果你的VS中找不到Advanced Save Options,查看文章《Windows下编译OpenCV带Tesseract OCR》中的 2.2.1.1 VS中添加修改文件格式的命令 部分的方法进行设置
在这里插入图片描述
在这里插入图片描述
(2)在工程属性,C/C++ -> Command Line 里面添加一句:%(AdditionalOptions) /source-charset:utf-8 /execution-charset:utf-8
在这里插入图片描述

上面设置好后,编译运行就能显示汉字了。


6. 编译好的OpenCV下载地址

下面是vs2017编译好的32位 opencv :
(1)opencv-4.5.4-带opencv_contrib和freetype-vs2017_x86版本
(2)opencv-4.5.2-带opencv_contrib和freetype-vs2017_x86版本


7. 参考文章

[1] https://yangshun.win/blogs/75d6773c/#freetype-%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE
[2] https://www.cnblogs.com/touch-skyer/p/14343791.html
[3] https://zhuanlan.zhihu.com/p/357042606
[4] https://zhuanlan.zhihu.com/p/357042606
[5] 下载不再卡顿,OpenCV中国镜像启用

  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
编译安装OpenCV 3.2和OpenCV_contrib的步骤如下: 1. 首先,下载OpenCV 3.2的源代码和OpenCV_contrib的扩展模块源代码。可以从OpenCV的官方网站或GitHub上获取这些源代码。 2. 解压下载的OpenCV 3.2源代码文件和OpenCV_contrib源代码文件,并将它们分别放置在不同的目录中。 3. 在终端中打开一个新的命令窗口,并导航到OpenCV的源代码目录。 4. 创建一个新的目录,用于保存编译后的OpenCV库文件。建议在源代码目录之外的某个位置创建此目录。 5. 在终端中输入以下命令来设置编译选项和安装路径: ``` cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/path/to/opencv_libs \ -D OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules \ /path/to/opencv_source ``` 其中,`/path/to/opencv_libs`是你创建的用于保存库文件的目录路径,`/path/to/opencv_contrib/modules`是OpenCV_contrib源代码的路径,`/path/to/opencv_source`是OpenCV源代码的路径。 6. 输入以下命令编译和安装OpenCV库文件: ``` make -j4 sudo make install ``` 这将会使用4个线程(可根据你的机器性能进行调整)进行编译,并将编译后的文件安装在指定的安装路径中。 7. 安装完成后,可以在指定的安装路径中找到生成的OpenCV库文件。在你的项目中,应该设置正确的头文件和库文件路径来使用OpenCV。 这些是基本的步骤来编译和安装OpenCV 3.2和OpenCV_contrib。请注意,在编译和安装过程中,可能会遇到依赖问题或其他错误,这可能需要进一步的配置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值