索引 簡述 準備 示例 效果圖 結語 簡述 我在使用opencv2或3的時候想要在圖片上添加中文文字,需要去下載Freetype庫,編譯好鏈接到opencv庫中才能中文的輸出。網上大部分在圖片中插入中文的教程還是win+vs的配置教程。像我這種win下有環境,linux下有環境的人來說,想要同步代碼 ...
索引
簡述
我在使用opencv2或3的時候想要在圖片上添加中文文字,需要去下載Freetype庫,編譯好鏈接到opencv庫中才能中文的輸出。網上大部分在圖片中插入中文的教程還是win+vs的配置教程。像我這種win下有環境,linux下有環境的人來說,想要同步代碼無疑有點麻煩。好在有替代方法,也就是接下來要將的例子pillow。
準備
- pillow安裝
不能再簡單了,你可以有如下安裝方式:
pip install pillow
或者
conda install pillow
- 下一個支持中文的字體庫
搜索關鍵詞:ttf 字體。 下載一個你喜歡的字體風格庫,文件的尾碼一般為ttf
。我下載了一個微軟雅黑庫,文件名就是msyh.ttf
示例
首先新建一個python文件:draw_chinese.py
。示例代碼ipython-notebook風格請去這裡
1.導入庫
import cv2
from PIL import Image,ImageFont,ImageDraw
from matplotlib.pyplot import imshow
import numpy as np
Image
:對象的實例代表一張圖片,可以進行一些大小變換和仿射變換操作
ImageFont
:用來載入準備階段中下載的字體庫文件
ImageDraw
: 基於image對象,創建一個可以在Image
實例上畫線條、貼文字的對象。
2.創建一張圖片
img = Image.new(mode="RGB",size=(400,150),color=(120,20,20))
#或者從numpy對象中創建也行。可以把opencv的圖片轉為numpy,通過numpy連接兩個圖像處理庫。
#img = Image.fromarray(numpy_object)
img.show()
3.載入字體庫
path_to_ttf = r'data/msyh.ttf'
font = ImageFont.truetype(path_to_ttf, size=25)
#size 確定一個漢字的大小
4.新建一個畫布
draw = ImageDraw.Draw( img )
6.在畫布上恣意妄為
draw.text(xy=(30,30),text='Hello,南牆已破!',font=font)
img.show()
#當然也可以把這個寫好字的圖片轉換回numpy
#img2array = np.asanyarray(img)
效果圖
結語
這個方法不用自己去下載編譯Freetype庫,pillow的安裝也很簡單。寫好後的代碼python2,python3均可用。跨平臺也沒事兒。算是曲線解決了opencv原生不支持中文字體的問題了吧。
pillow這個庫可以做一部分opencv的工作,到現在我發現一個比較常用但是pillow沒有的設置就是畫矩形框的時候不能設置矩形框邊線的寬度,需要自己手動實現:每次在原有基礎上增加或減少一個像素點的坐標位置重覆畫框,達到增加寬度的效果。而opencv只需要給一個width參數就可以了。