在 OpenCV 中使用中文字符串时出现乱码是一个常见问题,因为默认情况下 OpenCV 并不支持 UTF-8 编码的中文字符。为了在图像上显示中文,你需要采取一些措施来解决这个问题。以下是几种解决方法:
方法一:使用Pillow库转换为图像
- 安装 Pillow 库(如果尚未安装):
pip install pillow
将中文字符串转换为图像,然后使用 OpenCV 显示这个图像:
import cv2 from PIL import Image, ImageDraw, ImageFont def draw_chinese_text(image, text, position, font_size, color): font = ImageFont.truetype("simhei.ttf", font_size, encoding="utf-8") pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(pil_image) draw.text(position, text, font=font, fill=color) return pil_image # 使用示例 cap = cv2.VideoCapture(0) # 假设这是你的视频源 ret, frame = cap.read() text_img = draw_chinese_text(frame, "你好,世界", (50, 50), 30, "black") cv2.imshow("Video", cv2.cvtColor(np.array(text_img), cv2.COLOR_RGB2BGR)) cv2.waitKey(0) cv2.destroyAllWindows()
方法二:使用OpenCV的imdecode
和imencode
- 将中文字符串先编码为base64。
- 使用OpenCV的
imdecode
函数解码base64字符串为图像。 - 将解码后的图像与原图像进行融合。
这种方法较为复杂,且需要额外的编码和解码步骤,因此更推荐使用方法一。
方法三:更换字体文件
某些情况下,更换字体文件可能解决乱码问题,但这通常不适用于中文字符。
注意事项
- 确保字体文件(如
simhei.ttf
,即黑体)存在于你的系统中,并且路径正确。 - 使用 Pillow 库时,需要指定字体的路径和编码方式。
通常,使用方法一(使用Pillow库)是最简单直接的解决方案,它允许你在图像上显示中文而不会出现乱码。