liunx下用C++使用freetype库在opencv上打中文字

1、/visualizer.cpp:11:10: fatal error: ft2build.h: 没有那个文件或目录
   11 | #include <ft2build.h>

freetype安装问题,要把文件拉到根目录,不然找不到文件

2、编译失败找不到定义

/usr/bin/ld: CMakeFiles/interactive_face_detection_demo.dir/visualizer.cpp.o: in function `putChineseText(cv::Mat&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cv::Point_<int>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, cv::Scalar_<double>&)':
visualizer.cpp:(.text+0x5ec): undefined reference to `FT_Init_FreeType'
/usr/bin/ld: visualizer.cpp:(.text+0x610): undefined reference to `FT_New_Face'
/usr/bin/ld: visualizer.cpp:(.text+0x631): undefined reference to `FT_Set_Pixel_Sizes'
/usr/bin/ld: visualizer.cpp:(.text+0x928): undefined reference to `FT_Done_Face'
/usr/bin/ld: visualizer.cpp:(.text+0x934): undefined reference to `FT_Done_FreeType'
/usr/bin/ld: visualizer.cpp:(.text+0xa49): undefined reference to `FT_Load_Char'
collect2: error: ld returned 1 exit status

添加链接库:

3、编译通过

4、贴一下文字代码(GPT写的,挺好用)

int putChineseText(cv::Mat& img,  std::string& text,  cv::Point& position,  std::string& fontFile, int fontSize,  cv::Scalar& color)
{// 加载字体库FT_Library ft;if (FT_Init_FreeType(&ft)) {fprintf(stderr, "无法初始化FreeType库\n");return -1;}// 加载字体文件FT_Face face;if (FT_New_Face(ft, "/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc", 0, &face)) {fprintf(stderr, "无法加载字体文件\n");return -1;}// 设置字体大小FT_Set_Pixel_Sizes(face, 0, 24);// 创建OpenCV图像//cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255));// 创建OpenCV图像的画布cv::Mat canvas = img.clone();// 设置文本参数cv::Point pos(position.x, position.y); int lineThickness = 2;// 创建一个转换器std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;// 将std::string转换为std::wstringstd::wstring texta = converter.from_bytes(text);for (wchar_t c : texta) {FT_Load_Char(face, c, FT_LOAD_RENDER);FT_GlyphSlot glyph = face->glyph;// 将字形位图绘制到OpenCV图像上for (int row = 0; row < glyph->bitmap.rows; ++row) {for (int col = 0; col < glyph->bitmap.width; ++col) {int x = pos.x + glyph->bitmap_left + col;int y = pos.y - glyph->bitmap_top + row;if (x >= 0 && x < img.cols && y >= 0 && y < img.rows) {img.at<cv::Vec3b>(y, x) = cv::Vec3b(glyph->bitmap.buffer[row * glyph->bitmap.pitch + col], glyph->bitmap.buffer[row * glyph->bitmap.pitch + col], glyph->bitmap.buffer[row * glyph->bitmap.pitch + col]);}}}// 更新绘制位置pos.x += glyph->advance.x >> 6;}// 释放资源FT_Done_Face(face);FT_Done_FreeType(ft);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285649.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《计算机是怎样跑起来的》读书笔记

目录 1 计算机组成1 CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09;2 硬盘&#xff08;Hard Disk Drive&#xff09;3 内存&#xff08;Memory&#xff09;4 输入与输出设备&#xff08;I/0设备&#xff09; 2 软件是什么3 编程语言3.1 机器语言3.…

详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

一、本文介绍 本文给大家带来的教程是利用YOLOv5训练自己的数据集&#xff0c;以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程&#xff0c;同时通过示例的方式让大家来了解具体的操作流程&#xff0c;过程中还分享给大家一些好用的资源…

石器时代H5小游戏架设教程

本文讲解石器时代 H5 之恐龙宝贝架设教程&#xff0c;想研究 H5 游戏如何实现&#xff0c;那请跟着此次教程学习在拥有小游戏源码的情况下该如何搭建起来 开始架设 1. 架设条件 石器时代架设需要准备&#xff1a; 一台linux 服务器&#xff0c;建议 CentOs 7.6 版本&#xf…

vscode如何开发微信小程序?(保姆级教学)

1.安装“微信小程序开发工具”扩展 2.安装“vscode weapp api”扩展 3.安装“vscode wxml”扩展 4.安装“vscode-wechat”扩展 5.在终端执行命令&#xff1a; vue create -p dcloudio/uni-preset-vue uniapp-test uniapp-test就是我这里的项目名称了 6.如果遇到了这个错误&a…

构建高效持久层:深度解析 MyBatis-Plus(02)

目录 引言1. 逻辑删除1.1 概述1.2 逻辑删除的优势1.3.为什么使用逻辑删除1.4 综合案例 2. 乐观锁和悲观锁2.1.什么是乐观锁和悲观锁2.2.乐观锁和悲观锁的区别2.3.综合案例 3. 分页插件总结 引言 在现代软件开发中&#xff0c;数据库操作是不可或缺的一环。为了提高系统的性能、…

idea过往各版本下载

idea过往各版本下载 https://www.jetbrains.com/zh-cn/idea/download/other.html

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法 文章目录 针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法Abstractscreen和tmux介绍tmux常用命令以及快捷键Byobu简单操作步骤集锦参考文献 Abstract PyTorch多卡并行运行程序is one of the mos…

13. 从零用Rust编写正反向代理, HTTP中的压缩gzip,deflate,brotli算法

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…

预测性维护在汽车制造行业中的应用

汽车制造行业是一个高度复杂和精细化的领域&#xff0c;依赖于各种设备来完成生产流程。这些设备包括机械装配线、焊接机器人、喷涂设备、传送带等。然而&#xff0c;这些设备在长时间运行中不可避免地会遇到各种故障&#xff0c;给生产进程带来延误和成本增加。为了应对这一挑…

记录下系统异常到数据库中,方便查找定位,省去翻日志的麻烦。

将异常消息&#xff0c;产生时间&#xff0c;帧信息&#xff0c;操作信息等存入表中&#xff0c;方便查阅修改。适合小系统。大系统没试过。 在异常通知对象HandlerExceptionResolver解析完异常后&#xff0c;构建一个异常相关信息实体。存入表中。代码如下&#xff1a; publ…

Redis-内存模型

参考资料&#xff1a; 极客时间 Redis 亚风 内存管理 从两个问题入手: 1 Redis是如何知道⼀个key是否过期呢&#xff1f; 2 是不是TTL到期就⽴即删除了呢&#xff1f; Redis是K-V内存数据库&#xff0c;所有的K、V都保存在Dict中。不过在其db结构体中有5个Dict&#xff0c;我…

Neural Network——神经网络

1.feature reusing——特征复用 1.1 什么是特征复用 回顾我们之前所学习的模型&#xff0c;本质上都是基于线性回归&#xff0c;但却都可以运用于非线性相关的数据&#xff0c;包括使用了如下方法 增加更多的特征产生新的特征&#xff08;多项式回归&#xff09;核函数 在本身…