目錄
- 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) 積少成多
- 一般文字疊加的顏色和背景色盡量
反色
,即自動檢測疊加坐標區域的背景色亮度,通過灰度自適應。 - 另外一種方案是對文字
勾邊
,這種方式更加簡單。