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::wstring
    std::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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬虫快速入门

爬虫基础入门 爬虫原理1. HTTP协议与WEB开发1.简介2.请求协议与响应协议3.请求方式: get与post请求区分1区分2 环境准备1.安装python环境2.安装requests库安装方式验证安装成功 三种反爬机制1.UA反爬2.referer反爬3.cookie反爬 请求参数get请求以及查询参数post请求以及请求体参…

【终极教程】cocos2dx-js 分批次混淆压缩js文件

​ 说明: 1> 由于我们当前游戏框架的结构是平台形式的就是一个大厅里面有若干个子游戏,所以在发布的时候得区分子游戏和大厅了解了一下 project.json 里面有一个 jsList 可以把所有放进去的js文件压缩混淆成一个大的文件但是我们游戏的子游戏非常多 这样子弄显然不合适&…

sql_lab靶场搭建以及存在的一些问题

sql_lab靶场搭建问题 首先检查小皮版本 把小皮改到5.3.29版本如果没有可以直接点击更多版本进行选择安装 当版本不对时则会暴出这种错误 SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES: Fatal error: Uncaught Error: Call to undefined function mysql_co…

如何把大容量10G的文件分享给别人?三个方法收藏备用!

如果文件过大&#xff0c;比如10G的文件发送起来简直问题重重&#xff0c;不仅费时费流量而且还很可能在发送的中途失败&#xff0c;这时候就需要借助一些压缩软件对文件进行压缩&#xff0c;下面就向大家介绍3个好用的压缩软件~ 方法一&#xff1a;使用嗨格式压缩大师压缩后发…

安全、效率、成本:混合云数据库管理的三重挑战!

随着业务需求的不断演变&#xff0c;数据在多云平台之间流动&#xff0c;给数据库管控带来了新的层次和复杂性。这给数据库管控带来了前所未有的挑战。企业可能面临着一系列问题&#xff0c;包括安全性挑战、管理复杂性、性能与效率问题、成本控制难题、缺乏统一的管理视图以及…

【hcie-cloud】【9】华为云Stack_Deploy部署工具介绍

文章目录 前言华为云Stack Deploy简介华为云Stack Deploy工具简介华为云Stack Deploy工具部署范围华为云Stack Deploy工具节点网络要求华为云Stack Deploy工具部署流程 华为云Stack Deploy功能介绍部署工具工程场景部署流程介绍创建工程 - 基本信息填写创建工程 - 基本参数选择…

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…

钢销,到2027年复合年增长率为2.7%

钢铁是建筑、汽车和制造业等各个行业广泛使用的材料。由于对钢铁产品的需求不断增加&#xff0c;钢铁销售市场在过去几年出现了显着增长。在本次分析中&#xff0c;我们将审视全球钢材销售市场和中国钢材销售市场的发展趋势。全球钢材销售市场分析&#xff1a; 全球钢铁市场预计…

【EI会议征稿】2024年生成式人工智能与信息安全国际学术会议(GAIIS 2024)

2024年生成式人工智能与信息安全国际学术会议&#xff08;GAIIS 2024&#xff09; 2024 International Conference on Generative Artificial Intelligence and Information Security 2024年生成式人工智能与信息安全国际学术会议&#xff08;GAIIS 2024&#xff09;将于 202…

LeetCode:162. 寻找峰值、1901. 寻找峰值 II(二分 C++)

目录 162. 寻找峰值 题目描述&#xff1a; 实现代码与解析&#xff1a; 二分 原理思路&#xff1a; 1901. 寻找峰值 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 二分 原理思路&#xff1a; 162. 寻找峰值 题目描述&#xff1a; 峰值元素是指其值严格大于左…

sqlserver同步-日志传送

文章目录 先决条件安全性配置日志传送删除日志传送 (SQL Server)显示服务器实例上的事务日志传送状态报告监视日志传送 (Transact-SQL)故障转移到日志传送辅助服务器 (SQL Server)为受控故障转移做准备故障转移检查备份的日志文件是否都传送到辅助库把辅助库的日志文件还原到辅…

如何写好接口自动化测试脚本

谈到接口测试&#xff0c;大家关注更多的是哪个工具更优秀&#xff0c;更好用。但是很少人关注到接口测试用例的设计问题&#xff0c;也很少人会去写接口用例&#xff0c;都代码化了嘛&#xff0c;还写什么用例&#xff0c;是吧&#xff1f; 这样真的对么&#xff1f;我们是不…

京东2023年度各行业数据报告-2023全年度冰箱十大热门品牌销量榜单

今年&#xff0c;受家电市场整体大盘下滑的影响&#xff0c;冰箱市场的总体产销量较上年有降幅。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年京东平台上冰箱市场的全年销量为1300万&#xff0c;同比降低约9%&#xff1b;销售额将近320亿&#xff0c;同比降低…

UNet医学图像分割网络

UNet网络结构 对于医学图像的分割任务&#xff0c;这里使用UNet网络实现CT影响的病灶区域分割任务。记一篇学习笔记。 1、UNet网络结构 原始图片大小为(512, 512), 根据CT数据像素值分布的特征&#xff0c;对于image保留[-1024, 1024]范围内的像素&#xff0c;并归一 化处理到…

Java 基础学习(十五)集合排序、Lambda和Stream

1 集合排序 1.1 集合排序API 1.1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列&#xff0c;以使得集合中的元素按照预定义的顺序呈现。 在集合排序中&#xff0c;通常需要定义一个比较规则&#xff0c;这个比较规则用于决定集合中的元素在排序后…

Android App程序应用未校验签名证书——————《风险等级高》

目录 应用签名未校验风险1、检测目的2、风险等级3、检测依据4、风险描述5、检测步骤6、结果描述7、解决方案7.1、Android 检验 APK 是否签名的代码7.2、检验APK签名 8、结尾 应用签名未校验风险 1、检测目的 检测App程序启动时是否校验签名证书。 防止App的盗版率。未进行签…

jQuery实现轮播图代码

简述 一个简单的jQuery轮播图代码,首先,定义了一个slideshow-container的div容器,其中包含了所有轮播图幻灯片。每个幻灯片都包含一个mySlides的类名,并且使用CSS将其隐藏。然后,使用JavaScript代码来控制幻灯片的显示和隐藏。在showSlides()函数中,遍历所有幻灯片并将它…

JPEG文件内嵌HTML代码(JavaScript型图片马)

基础概念 0xFFD8&#xff1a;jpeg文件开始标志&#xff1b; 0xFFFE&#xff1a;jpeg文件注释开始标志&#xff1b; 0x0166&#xff1a;注释后紧跟的16进制数值&#xff0c;被选中部分长度为358字节&#xff0c;换算为16进制为166&#xff1b; 0xFFE0&#xff1a;标志图片内容开…

docker 部署kafka

随笔记录 目录 1. 安装zookeeper 2. 安装Kafka 2.1 拉取kafka image 2.2 查询本地docker images 2.3 查看本地 容器&#xff08;docker container&#xff09; 2.3.1 查看本地已启动的 docker container 2.3.2 查看所有容器的列表&#xff0c;包括已停止的容器。 2.4 …

Mybatis-Plus的分页语句流程保姆级分析(四)

group : com.baomidou version:3.5.2.2-SNAPSHOT 为什么要分析分页流程 因为我在使用的时候发现分页不生效&#xff0c;得分析一下找到原因。 问题描述&#xff1a; 我的分页不生效。 com.baomidou.mybatisplus.extension.plugins.pagination的Page对象。 代码如下&#x…