windows下编译OpenCV带opencv_contrib和freetype

article/2025/8/30 9:31:44

目录

  • 1. 下载安装cmake、opencv
  • 2. 编译freetype和harfbuzz
      • 2.1 pkg-config
      • 2.2 freetype
      • 2.3 harfbuzz
      • 2.4 修改opencv_contrib下的modules/freetype/CMakeLists.txt
  • 3. 编译OpenCV
  • 5. 示例
  • 6. 编译好的OpenCV下载地址
  • 7. 参考文章

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_DIRSNAMES hb-ft.h PATH_SUFFIXES harfbuzzHINTS ${HARFBUZZ_DIR}/include)
find_library(HARFBUZZ_LIBRARIESNAMES harfbuzzHINTS ${HARFBUZZ_DIR}/lib)
find_package_handle_standard_args(HARFBUZZDEFAULT_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中国镜像启用


http://chatgpt.dhexx.cn/article/7e7SSvlU.shtml

相关文章

嵌入式应用-详解移植并使用freetype显示文字

目录 前言 1. freetype和相关概念简介 2.freetype显示文字流程和主要函数 2.1 包含头文件及API头文件&#xff1a;ft2build.h 2.2 初始化&#xff1a; FT_InitFreetype 2.3 加载&#xff08;打开&#xff09;字体Face&#xff1a; FT_New_Face 2.4 设置字体大小&#x…

freetype用法

freetype用法 文章目录 freetype用法0.实现1.变量定义2.lcd操作获取屏幕信息3.freetype初始化4.绘画 1.字形度量2.类1.FT 中的面向对象2.FT_Library 类3.FT_Face 类4 FT_Size 类5 FT_GlyphSlot 类 3.函数1.把一个字符码转换为一个字形索引FT_Get_Char_Index函数2.从 face 中装…

FreeType使用

前言 在openGL绘制字体&#xff0c;我们一般都使用freeType字体库&#xff0c;如下图所示 下载 freeType官网 编译源码 使用CMake编译源码 如果嫌麻烦&#xff0c;我这里有编译好的库&#xff0c;包括头文件、lib静态库、dll动态库 编译好的lib和dll库下载地址 例子 …

【C++】字体文件解析(FreeType)

目录 字体文件解析 一、前言 二、基本排版概念 1.字体文件 2.字符图像和字符表 3.字符和字体指标 三、字形轮廓 四、字形指标 1.基线、笔和布局 2.排版指标和边界框 3.方位与步进 4.网格拟合的效果 5.文本宽度与边界框 五、代码实现 六、使用实例 七、合并缓存优…

FreeType 用法

Freetype是一个跨平台、开源的字体渲染器&#xff0c;网上很多文章介绍&#xff0c;本人就不啰嗦了。本文重点在于实现文章标题所属的各种效果&#xff0c;不是Freetype的基本使用方法介绍文档&#xff0c;所以对于Freetype不熟悉的同学们请先学习下Freetype的基本用法&#xf…

freetype 使用解析---矢量字体

屏幕显示字体(字体点阵)&#xff1a; 在内核中有对应的文件fontdata_8x16.c&#xff0c;将字体通过数组8*16来描述&#xff0c;0表示为空&#xff0c;1表示描点&#xff0c;通过通过各个点形成一个字体点阵显示在屏幕上&#xff0c;而在我们所有终端中显示的字体也可以是通过点…

freetype简介与测试

目录 一、简要 二、文字显示过程 三、freetype中的step1 四、在PC上测试freetype 4.1 分析main函数 4.2 修改main函数 4.3 在PC上测试 4.4 得到CBox 一、简要 从点阵文件中把字母或者汉字的字模取出来在LCD上显示这个方式有个缺点&#xff0c;这个文字的大小就固定了不…

Freetype 的安装与使用

4 交叉编译程序 4.1 程序运行的一些基础知识 编译程序时去哪找头文件&#xff1f; 系统目录&#xff1a;就是交叉编译工具链里的某个 include 目录&#xff1b; 也可以自己指定&#xff1a;编译时用 “ -I dir ” 选项指定。 链接时去哪找库文件&#xff1f; 系统目录&#x…

java和web哪个难_web前端和java哪个难学?哪个简单?

说到java很多都人都熟知&#xff0c;但是说到web前端可能是很多人并不知道&#xff0c;随着最近几年的发展&#xff0c;web前端开发人越来越吃香&#xff0c;无论是薪资待遇还是岗位的招聘数量比java差不了多少&#xff0c;最近有同学在咨询web前端和java哪个难学这个问题&…

js和java那个难_javascript与java哪个难?

javascript与java哪个难&#xff1f;答案是&#xff1a;JavaScript比Java更难。那么这是为什么&#xff1f;下面本篇文章就来给大家介绍一下&#xff0c;希望对大家有所帮助。 原因&#xff1a; JavaScript有太多东西需要你自己去理解&#xff0c;这些东西里有很多要么Java已经…

没学历学java很难找工作吗

说实话不是学Java很难找工作&#xff0c;是以后找工作基本都会看学历&#xff0c;学历这个东西说重要也重要&#xff0c;因为它决定了你的简历能不能呈现到面试官面前&#xff0c;如果你的学历不够的话很有可能在第一轮简历就被刷下去了&#xff0c;它根本就不会呈现在面试官面…

java最难的部分_java最难学的是那一块?

原标题&#xff1a;java最难学的是那一块&#xff1f; 对于那些打算通过学习java来找到一份工作的同学来说&#xff0c;可以分为三个学习阶段&#xff0c;初级&#xff0c;中级&#xff0c;高级。不同的学习阶段有不同的难点&#xff0c;下来我就简单的和大家仔细的聊聊&#x…

学习Java开发难不难?好学吗?

学习Java难不难&#xff1f;这是很多希望学习Java的人比较纠结的问题。实际上&#xff0c;Java语言是非常易学的&#xff0c;Java语言机遇&#xff23;语言&#xff0c;却又高于&#xff23;语言。Java语言简单易学的特性使得大多数程序员很容易学习和使用Java。 Java是个简单…

零基础Java难学吗?自学怎么样?

在零基础上学习Java难吗?自学呢?要回答这个问题,我们应该从多方面来回答。首先,谁更适合学习Java?   如果仅仅从兴趣上说那么人人都可以胜任,那就像姜子牙70多年的探险生涯。47岁的刘邦在沛县召集民众响应陈胜武广起义。古代的年龄相当于我们现在的六十岁。齐白石,一位…

java学习路线,一个初中生学java要多久,java难学吗

一门永不过时的编程语言——Java 软件开发 java难学吗 java不难&#xff0c;你可以做如下学习 一、到相应的培训机构付费学习 别在这说培训机构没用什么的&#xff0c;不过一定要找正规的培训机构&#xff0c;不然容易被坑。培训机构里面的课程都是现在工作中需要用到的&am…

学Java难吗

Java这门语言你要是单独拎出来&#xff0c;那还是挺复杂的&#xff0c;但你要是把它放到编程里面&#xff0c;那算不上难&#xff0c;因为编程这门行业本来就难&#xff0c;而且&#xff0c;现在大学计算机专业的学生&#xff0c;大学期间&#xff0c;会设置Java这门课程&#…

c语言难还是java难_C语言真的比Java难学吗?

原标题&#xff1a; C语言真的比Java难学吗&#xff1f; 千锋小编觉得C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言语法比较简单便捷&#xff0c;而且性能快速&#xff0c;只比汇编语言…

学习Java很难吗

没有简单的语言,编程语言各有各的优势,同时也各有各的难点,不过这些难点也可以是他们的特点。就像C++难的是语言的细节,Java难的是各种库,各种函数的调用,它的基本语法很简单,但只靠基础是做不出什么东西的,必须去熟悉各种轮子才能进行开发。 第一、 Java入门很简单…

Java难学吗

学习Java说难其实也不难&#xff01; 毕竟世上无难事&#xff0c;只怕有心人。 Java是编程语言中比较难学的一门语言&#xff0c;它的难度并不低&#xff0c;相对比于C语言来说&#xff0c;Java的学习难度要小一些。 Java的学习中最难得就是&#xff0c;各种各样的框架&#x…

java学起来难不难?

同学们问的最多的一个关于Java的问题就是java学起来到底难不难&#xff1f;java好不好学&#xff1f;小千综合过去毕业学员给大家介绍一下学Java到底难不难。 java语言 单单来说学Java这件事的话&#xff0c;小千认为是不难的&#xff0c;实际上Java经常会用到的代码结构无非就…