本文共 1469 字,大约阅读时间需要 4 分钟。
OpenCV添加中文的方法存在一定的挑战性。虽然可以通过putText功能轻松添加英文文字,但当尝试添加中文时,可能会出现“???”的乱码。这是由于OpenCV默认的字体渲染方式对中文字符的处理存在问题。为了解决这个问题,我们需要采取一些特殊的处理措施。
解决中文乱码问题的关键在于使用适当的图像处理库来绘制中文字符。具体来说,我们可以使用Python的PIL(Python Imaging Library)库来实现中文的输出。PIL允许我们指定字体文件,从而能够正确地渲染中文字符。
OpenCV图片转换为PIL图片格式
首先需要将OpenCV中的图片格式转换为PIL支持的格式。OpenCV默认使用BGR颜色空间,而PIL使用RGB颜色空间,因此需要使用颜色空间转换函数进行转换。以下是转换代码:img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
使用PIL绘制文字
接下来,我们使用PIL的ImageDraw模块来绘制中文文字。具体步骤如下: ImageFont.truetype加载字体文件。注意:字体文件路径需要正确配置,例如simsun.ttc字体文件在Windows系统中通常位于C:\Windows\Fonts目录下。ImageDraw.Draw方法绘制文字,指定文字内容、位置、颜色以及字体。PIL图片转换为OpenCV图片格式
最后,将处理完毕的PIL图片转换回OpenCV支持的格式。以下是转换代码:cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
以下是完整的代码示例,用于在OpenCV中添加中文文字:
#coding=utf-8import cv2import numpyfrom PIL import Image, ImageDraw, ImageFontdef cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20): if isinstance(img, numpy.ndarray): img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(img) fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8") draw.text((left, top), text, textColor, font=fontText) return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)# 示例使用img = cv2ImgAddText(img, "大家好,我是星爷", 140, 60, (255, 255, 0), 20) 通过上述方法,您可以在OpenCV图片中成功添加中文文字,而不会出现乱码问题。文字会出现在指定的位置,并且支持自定义的字体颜色和字体大小。
转载地址:http://rgsfk.baihongyu.com/