OpenCV新增文字的方法putText(...),新增英文是沒有問題的,但如果你要新增中文就會出現“???”的亂碼,需要特殊處理一下。
下文提供封裝好的(程式碼)方法,供OpenCV新增中文使用。
往期目錄
視訊人臉檢測——Dlib版(六)
OpenCV新增中文(五)
圖片人臉檢測——Dlib版(四)
視訊人臉檢測——OpenCV版(三)
圖片人臉檢測——OpenCV版(二)
OpenCV環境搭建(一)
更多更新,歡迎訪問我的github:https://github.com/vipstone/faceai
效果預覽
實現思路
使用PIL的圖片繪製新增中文,可以指定字型檔案,那麼也就是說使用PIL可以實現中文的輸出。
有思路之後,接下來的工作就簡單了。
- OpenCV圖片格式轉換成PIL的圖片格式;
- 使用PIL繪製文字;
- 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)