图像加入文字
这篇教学会介绍如何运用 OpenCV 里的 putText() 方法,在图像上加入文字,并透过 PIL 函数库,让图像可以支援中文的显示。
快速导览:
因为程序中的 OpenCV 会需要使用镜头或 GPU,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda ) ,并安装 OpenCV 函数库 ( 参考:OpenCV 函数库 )。
putText() 加入文字
putText() 方法可以在图像里加入文字,使用方法如下 ( 支援的字型参考:HersheyFonts ):
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType)
# img 來源影像
# text 文字內容
# org 文字座標 ( 垂直方向是文字底部到影像頂端的距離 )
# fontFace 文字字型
# fontScale 文字尺寸
# color 線條顏色,使用 BGR
# thickness 文字外框線條粗細,預設 1
# lineType 外框線條樣式,預設 cv2.LINE_8,設定 cv2.LINE_AA 可以反鋸齒
下方的程序执行后,会在 300x150 的黑色画布上,加入 Hello 的文字:
import cv2
import numpy as np
img = np.zeros((150,300,3), dtype='uint8') # 建立 300x150 的黑色畫布
text = 'Hello'
org = (20,90)
fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 2.5
color = (0,0,255)
thickness = 5
lineType = cv2.LINE_AA
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType)
cv2.imshow('oxxostudio', img)
cv2.waitKey(0) # 按下任意鍵停止
cv2.destroyAllWindows()
使用中文字型
如果要使用中文字型,必须搭配 PIL 函数库,下方的范例使用 Google 云端字型 ( Noto Sans Traditional Chinese ),下载字型文件后与程序放在同一个文件夹里,先绘制为 PIL 图形,再将图形转换成 numpy 数组,就能转换成 opencv 的图像。
图像使用 NumPy 的数组格式,座标为 (y, x, 色彩深度)
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image # 載入 PIL 相關函式庫
img = np.zeros((150,300,3), dtype='uint8') # 繪製黑色畫布
fontpath = 'NotoSansTC-Regular.otf' # 設定字型路徑
font = ImageFont.truetype(fontpath, 50) # 設定字型與文字大小
imgPil = Image.fromarray(img) # 將 img 轉換成 PIL 影像
draw = ImageDraw.Draw(imgPil) # 準備開始畫畫
draw.text((0, 0), '大家好~\n嘿嘿嘿~', fill=(255, 255, 255), font=font) # 畫入文字,\n 表示換行
img = np.array(imgPil) # 將 PIL 影像轉換成 numpy 陣列
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注