opencv_python 的 cv2.namedWindow 与 cv2.putText 无法显示中文问题

opencv_python 的 cv2.namedWindow 与 cv2.putText 输入中文问题

cv2.namedWindow 与 cv2.imshow 的窗口名设置为中文

问题:

cv2.namedWindow('中文')
cv2.imshow('中文', frame)

opencv_python 的 cv2.namedWindow 与 cv2.putText 无法显示中文问题_第1张图片
解决方法:

def zh_ch(string):
    return string.encode("gbk").decode('UTF-8', errors='ignore')

cv2.namedWindow(zh_ch('中文'))
cv2.imshow(zh_ch('中文'), frame)

原因分析:
因为namedWindow和imshow的窗口名采用gbk编码,而Python3默认UTF-8编码,所以应该将中文转成gbk编码的格式。但是这样转换并不完美,大部分中文都不能转换,无法显示,建议还是使用英文命名窗口

cv2.putText往图片插入中文

问题:

text = "{}: {:.2f}%".format(emotion, prob * 100)
cv2.putText(frame, text, (10, 10),
            cv2.FONT_HERSHEY_SIMPLEX, 0.45,
            (255, 255, 255), 2)

opencv_python 的 cv2.namedWindow 与 cv2.putText 无法显示中文问题_第2张图片
解决方法:抛弃cv2.putText 投入 PIL 的怀抱

  • 下载字体
    http://www.font5.com.cn/font_download.php?id=150&part=1237886897
  • 下载pillow
pip install pillow
  • 调用PIL
from PIL import Image, ImageDraw, ImageFont

ret, frame = cv2.read()

def addText(img, text, i):
	# 判断图片是否为ndarray格式,转为RGB图片
    if (isinstance(img, numpy.ndarray)):
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        
    draw = ImageDraw.Draw(img)
    # 参数依次为 字体、字体大小、编码
    fontStyle = ImageFont.truetype("font/simsun.ttc", 20, encoding="utf-8")
    # 参数依次为位置、文本、颜色、字体
    draw.text((10, (i * 50) + 23), text, (255, 255, 255), font=fontStyle)
    
    # 转回BGR图片、ndarray格式
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

结果:
opencv_python 的 cv2.namedWindow 与 cv2.putText 无法显示中文问题_第3张图片

你可能感兴趣的:(cv2)