本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。

开始

在做项目想将自己的想法输出显示在视频上,但是发现输出上面的汉字是这个:
执行程序:

import cv2
cap = cv2.VideoCapture(0)
font=cv2.FONT_ITALIC
while(1):
    ret,frame = cap.read()
    # 展示图片
    cv2.putText(frame,"劳资最帅", (123, 123), font, 2, (0, 255, 0), 3)
    cv2.imshow('capture',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
#释放对象和销毁窗口
cap.release()
cv2.destroyAllWindows()

在这里插入图片描述
显示出来的都是问号,????????????????

解决方案

通过查询资料,bug终究解决,主要是重新封装一个函数,直接调用即可,
在这里需要一个语言包,我放在网盘里面了
链接:https://pan.baidu.com/s/1uKxIauqNxSTTQ30x8Y5NHg
提取码:smwx
复制这段内容后打开百度网盘手机App,操作更方便哦

解压之后放在你的py文件同路径下即可。

封装函数调用

这里直接写成一个cv2AddChineseText()函数即可,然后直接调用
封装的函数为:

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

这里有我们刚才网盘的simsun.ttc文件

整体改进后的代码:

import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np
cap = cv2.VideoCapture(0)
# font=cv2.FONT_ITALIC
def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30):
    if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "simsun.ttc", textSize, encoding="utf-8")
    # 绘制文本
    draw.text(position, text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
while(1):
    ret,frame = cap.read()
    # 展示图片
    frame=cv2AddChineseText(frame,"劳资最帅", (123, 123),(0, 255, 0), 30)
    cv2.imshow('capture',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
#释放对象和销毁窗口
cap.release()
cv2.destroyAllWindows()

在这里插入图片描述
于是就出现了几个最真实的几个字 哈哈

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐