图像叠加中文字体

news/2024/7/21 7:41:52 标签: opencv, c++, OSD, 图像处理

目录

  • 1) 前言
  • 2) freetype下载
  • 3) Demo
    • 3.1) 下载
    • 3.2) 编译
    • 3.3) 运行
    • 3.4) 结果
    • 3.5) 更详细的使用见目录中说明
  • 4) 积少成多

1) 前言

  • 最近在做图片、视频叠加文字,要求支持中文,基本原理是将图片或视频解码后叠加文字,之后做图片或视频编码即可。
  • 项目中是使用OpenCV的文字叠加,因为使用的版本不支持freetype,所以在此记录下,主要使用OpenCV+freetype的方式对原始数据的文字叠加。

2) freetype下载

链接: freetype master
编译部分在此不展开。

3) Demo

该demo基本满足需求,支持选择字体类型,文字大小设置,颜色设置,水平/垂直叠加,增加下划线以及透明度等,主要参考

struct FontProperty {
        int fontSize;           // font size (pixel)
        double spaceRatio;       // ratio of distance when meet a space, base on font size
        double fontRatio;        // ratio of distance between each character, base on font size
        double fontRotateAngle;  // rotate angle
        double fontDiaphaneity;  // merge ratio
        bool fontIsUnderline;   // underline
        bool fontIsVertical;    // put text in vertical
    };

3.1) 下载

master原链接:freetype_opencv

3.2) 编译

原链接代码编译不过去,做部分修改和增加一些依赖即可,build.sh为编译文件。链接:工程项目

g++ *.cpp  -I freetype2/ -I /usr/include/opencv4/ ./libfreetype.a  -L /usr/lib/aarch64-linux-gnu/ -lopencv_core -lopencv_highgui -lz -lopencv_imgproc -lopencv_imgcodecs
说明:
1)板端(用的Soc是NVIDIA的NANO)opencv使用的是4.5.4
2)目录中的libfreetype.a是已编译好的freetype静态库,理论上是aarch64的架构都可以使用
3)以上编译脚本的-I和-L部分根据自己的OpenCV实际安装情况做调整, 当然也可以用cmake

3.3) 运行

./a.out 0		/**0表示用的默认字体,该字体有沟边效果,其他字体输入1,2,3有不同的效果*/

3.4) 结果

在这里插入图片描述

3.5) 更详细的使用见目录中说明

4) 积少成多

  • 一般文字叠加的颜色和背景色尽量反色,即自动检测叠加坐标区域的背景色亮度,通过灰度自适应。
  • 另外一种方案是对文字勾边,这种方式更加简单。

http://www.niftyadmin.cn/n/5259367.html

相关文章

数据结构:并查集的原理和运用

文章目录 什么是并查集?并查集的模拟实现并查集的应用省份数量等式方程的可满足性 本篇总结的是并查集的使用方法和运用 什么是并查集? 给定这样一个场景,n个不同的元素划分成不同的,不相交的集合,在开始的时候&…

leetcode--3. 无重复字符的最长子串[滑动窗口\哈希表 c++]

原题 : 3. 无重复字符的最长子串 - 力扣(LeetCode) 题目解析: 最长子串可以用滑动窗口解决,无重复字符可以使用哈希表解决。 算法原理: 滑动窗口哈希表 哈希表作为一个数组存放每个字符出现的次数。 …

大数据湖体系规划与建设方案:PPT全文51页,附下载

关键词:大数据解决方案,数据湖解决方案,数据数仓建设方案,大数据湖建设规划,大数据湖发展趋势 一、大数据湖体系规划与建设背景 在传统的企业信息化建设中,各个业务系统通常是独立建设的,导致…

el-tree-select 如何使用不规则的数据作为数据来源

el-tree-select 如何使用不规则的数据作为数据来源 在项目中可能使用的 tree 数据并不是那么标准,这样不要紧,只要我们通过 props 指定一下数据结构即可。 比如,项目中的数据结构是这样的: 我们只需要使用 pros 字段指定 tree …

外汇天眼:心理素质决定交易成败!

在交易市场中,参与者非常多,成功的却极少。 成功的交易者几乎完全凭借个人的聪明才智,迎难而上,依靠顽强的毅力、坚韧不拔的性格以及冒险精神,战胜自己交易路上的一切挫折。 而这其中交易者的心理素质与其盈亏紧密相关…

Echarts运用之饼状图常见问题及案例代码

前言 ECharts 是一个使用 JavaScript 实现的开源可视化库,它可以帮助用户以简单的方式创建复杂的时间序列、条形图、饼图、地图等图形。 初学者,可参考下我的另外两篇文章,从基础到深入,解读饼状图的运用。 ECharts初始案例(入门) ECharts之饼图 常见问题及案例代码 数…

Azure Machine Learning - 使用自己的数据与 Azure OpenAI 模型对话

在本文中,可以将自己的数据与 Azure OpenAI 模型配合使用。 对数据使用 Azure OpenAI 模型可以提供功能强大的对话 AI 平台,从而实现更快、更准确的通信。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队…

【Hive】

一、Hive是什么 Hive是一款建立在Hadoop之上的开源数据仓库系统,将Hadoop文件中的结构化、半结构化数据文件映射成一张数据库表,同时提供了一种类SQL语言(HQL),用于访问和分析存在Hadoop中的大型数据集。Hive的核心是将…