目录
- 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 sizedouble fontRatio; // ratio of distance between each character, base on font sizedouble fontRotateAngle; // rotate angledouble fontDiaphaneity; // merge ratiobool fontIsUnderline; // underlinebool 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) 积少成多
- 一般文字叠加的颜色和背景色尽量
反色
,即自动检测叠加坐标区域的背景色亮度,通过灰度自适应。 - 另外一种方案是对文字
勾边
,这种方式更加简单。