簡述

我在使用opencv2或3的時候想要在圖片上添加中文文字,需要去下載Freetype庫,編譯好鏈接到opencv庫中才能中文的輸出。網(wǎng)上大部分在圖片中插入中文的教程還是win+vs的配置教程。像我這種win下有環(huán)境,linux下有環(huán)境的人來說,想要同步代碼無疑有點麻煩。好在有替代方法,也就是接下來要將的例子pillow。

準備

  1. pillow安裝
    不能再簡單了,你可以有如下安裝方式
    pip install pillow
    或者
    conda install pillow

  2. 下一個支持中文的字體庫
    搜索關(guān)鍵詞:ttf 字體。 下載一個你喜歡的字體風(fēng)格庫,文件的后綴一般為ttf。我下載了一個微軟雅黑庫,文件名就是msyh.ttf

示例

首先新建一個python文件:draw_chinese.py。示例代碼ipython-notebook風(fēng)格請去這里
1.導(dǎo)入庫

import cv2 from PIL import Image,ImageFont,ImageDraw from matplotlib.pyplot import imshow import numpy as np

Image:對象的實例代表一張圖片,可以進行一些大小變換和仿射變換操作
ImageFont:用來加載準備階段中下載的字體庫文件
ImageDraw: 基于image對象,創(chuàng)建一個可以在Image實例上畫線條、貼文字的對象。
2.創(chuàng)建一張圖片

img = Image.new(mode="RGB",size=(400,150),color=(120,20,20)) #或者從numpy對象中創(chuàng)建也行??梢园裲pencv的圖片轉(zhuǎn)為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() #當(dāng)然也可以把這個寫好字的圖片轉(zhuǎn)換回numpy #img2array = np.asanyarray(img)

效果圖



結(jié)語

這個方法不用自己去下載編譯Freetype庫,pillow的安裝也很簡單。寫好后的代碼python2,python3均可用??缙脚_也沒事兒。算是曲線解決了opencv原生不支持中文字體的問題了吧。
pillow這個庫可以做一部分opencv的工作,到現(xiàn)在我發(fā)現(xiàn)一個比較常用但是pillow沒有的設(shè)置就是畫矩形框的時候不能設(shè)置矩形框邊線的寬度,需要自己手動實現(xiàn):每次在原有基礎(chǔ)上增加或減少一個像素點的坐標位置重復(fù)畫框,達到增加寬度的效果。而opencv只需要給一個width參數(shù)就可以了。

http://www.cnblogs.com/nanqiangyipo/p/7105460.html