博客
关于我
OpenCV添加中文(五)
阅读量:792 次
发布时间:2023-02-23

本文共 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图片中成功添加中文文字,而不会出现乱码问题。文字会出现在指定的位置,并且支持自定义的字体颜色和字体大小。

    注意事项

    • 确保字体文件路径正确。
    • 如果需要使用其他字体,请确保字体文件格式与PIL的truetype函数兼容。
    • 在实际应用中,建议对图片进行缩放处理,以确保文字清晰可见。

    转载地址:http://rgsfk.baihongyu.com/

    你可能感兴趣的文章
    opencv之cv2.findContours和drawContours(python)
    查看>>
    opencv之namedWindow,imshow出现两个窗口
    查看>>
    opencv之模糊处理
    查看>>
    Opencv介绍及opencv3.0在 vs2010上的配置
    查看>>
    OpenCV使用霍夫变换检测图像中的形状
    查看>>
    opencv保存图片路径包含中文乱码解决方案
    查看>>
    OpenCV保证输入图像为三通道
    查看>>
    OpenCV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    opencv图像分割2-GMM
    查看>>
    opencv图像分割3-分水岭方法
    查看>>
    opencv图像切割1-KMeans方法
    查看>>
    OpenCV图像处理篇之阈值操作函数
    查看>>
    opencv图像特征融合-seamlessClone
    查看>>
    OpenCV图像的深浅拷贝
    查看>>
    OpenCV在Google Colboratory中不起作用
    查看>>
    OpenCV学习(13) 细化算法(1)(转)
    查看>>
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    查看>>
    OpenCV学堂 | CV开发者必须懂的9种距离度量方法,内含欧氏距离、切比雪夫距离等(建议收藏)
    查看>>
    OpenCV学堂 | OpenCV中支持的人脸检测方法整理与汇总
    查看>>
    OpenCV学堂 | OpenCV案例 | 基于轮廓分析对象提取
    查看>>