欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-09 20:08:35
...

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

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

问题:

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

opencv_python 的 cv2.namedWindow 与 cv2.putText 无法显示中文问题
解决方法:

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 无法显示中文问题
解决方法:抛弃cv2.putText 投入 PIL 的怀抱

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 无法显示中文问题

相关标签: cv2 cv python