天天看點

OpenCV添加中文(五)

OpenCV添加文字的方法putText(...),添加英文是沒有問題的,但如果你要添加中文就會出現“???”的亂碼,需要特殊處理一下。

下文提供封裝好的(代碼)方法,供OpenCV添加中文使用。

往期目錄

視訊人臉檢測——Dlib版(六)

OpenCV添加中文(五)

圖檔人臉檢測——Dlib版(四)

視訊人臉檢測——OpenCV版(三)

圖檔人臉檢測——OpenCV版(二)

OpenCV環境搭建(一)

更多更新,歡迎通路我的github:https://github.com/vipstone/faceai

效果預覽

實作思路

使用PIL的圖檔繪制添加中文,可以指定字型檔案,那麼也就是說使用PIL可以實作中文的輸出。

有思路之後,接下來的工作就簡單了。

  1. OpenCV圖檔格式轉換成PIL的圖檔格式;
  2. 使用PIL繪制文字;
  3. PIL圖檔格式轉換成OpenCV的圖檔格式;

代碼分解

OpenCV圖檔轉換為PIL圖檔格式

img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
           

使用PIL繪制文字

draw = ImageDraw.Draw(img)
fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
draw.text((left, top), "文字内容", textColor, font=fontText)
           

字型檔案為:simsun.ttc,Windows可以在C:\Windows\Fonts下面查找。

PIL圖檔格式轉換成OpenCV的圖檔格式

cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
           

完整代碼

封裝好的完整方法

#coding=utf-8
#中文亂碼處理

import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont

def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  #判斷是否OpenCV圖檔類型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype(
        "font/simsun.ttc", textSize, encoding="utf-8")
    draw.text((left, top), text, textColor, font=fontText)
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

           

代碼調用

img = cv2ImgAddText(img, "大家好,我是星爺", 140, 60, (255, 255, 0), 20)
           

關注下面二維碼,訂閱更多精彩内容。

OpenCV添加中文(五)
OpenCV添加中文(五)
OpenCV添加中文(五)

關注公衆号(加好友):

OpenCV添加中文(五)

作者:

王磊的部落格

出處:

http://vipstone.cnblogs.com/