python opencv cv2.putText()显示中文问题

您所在的位置:网站首页 怎么在图片上添加文字做成表情 python opencv cv2.putText()显示中文问题

python opencv cv2.putText()显示中文问题

2023-09-16 02:57| 来源: 网络整理| 查看: 265

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

开始

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

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()

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3