解决cv2.putText能显示中文为“????”的问题

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
for i in range(5):
    fname = './hecheng/{}.jpg'.format(i)
    img = cv2.imread(fname)
	# 画矩形框 距离靠左靠上的位置
	# p1指的是框左边上边到图像左边上边距离
    # p2指的是框右边下边到图像左边上边距离

    # fname就写自己图片所在位置
    p1 = (250, 365)  # 左边,上边   #数1 , 数2
    p2 = (250 + 540, 365 + 105)  # 右边,下边  #数1+数3,数2+数4
    cv2.rectangle(img, p1, p2, (0, 255, 0), 2)

    a = "营业执照" # 类别名称
    font = cv2.FONT_HERSHEY_SIMPLEX  # 定义字体
    imgzi = cv2.putText(img, '{}'.format(a), (250, 365 - 5), font, 1, (0, 255, 255), 4)
    # imgzi = cv2.putText(图片, '{} {:.3f}'.format(标签名, 置信度), (字体左边开始位置, 字体上面开始位置), 字体, 字体大小, (R, G, B), 字体厚度)
    # 图像,      文字内容,      坐标(右上角坐标),字体, 大小,  颜色,    字体厚度

    cv2.imwrite('./test/test{}.jpg'.format(i), img)

print("over over")

自己在图片上添加文字,但是却显示的是问号,因此在网上搜索了下解决的方法,希望能够帮到大家

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "STSONG.TTF", textSize, encoding="utf-8")
    # 绘制文本
    draw.text((left, top), text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

a = "营业执照"
for i  in range(5):
    img = cv2ImgAddText(Image.open('./img/{}.jpg'.format(i)), a, 250, 365 - 25, (0, 255, 139), 20)  #添加
        # cv2ImgAddText(图像, 文字内容, 字体左边开始位置, 字体上面开始位置, (R, G, B), 字体大小)
    #添加框
    p1 = (250, 365)  # 左边,上边   #数1 , 数2
    p2 = (250 + 540, 365 + 105)  # 右边,下边  #数1+数3,数2+数4
    cv2.rectangle(img, p1, p2, (0, 255, 0), 2)
    
    cv2.imwrite('./test/test{}.jpg'.format(i), img)  #保存图片
    
print("over over")

最终得到下面的效果
解决cv2.putText能显示中文为“????”的问题_第1张图片

你可能感兴趣的:(python,opencv,python)